Как измерить задержку сообщения между несколькими приложениями, работающими в многоядерной системе?

Я занимаюсь разработкой системы, которая состоит из трех основных компонентов программного обеспечения. Клиентское приложение, основное приложение и приложение обмена — все они работают на одном сервере. Сообщения принимаются в клиентском приложении, передаются в основное приложение, а затем пересылаются в соответствующее приложение обмена.

Я хотел бы измерить внутреннюю задержку сообщения в нашей системе, поэтому отметьте время сообщения, когда оно получено на клиенте, в ядре, и отметку времени, когда сообщение отправлено из модуля обмена.

Разумно ли использовать QueryPerformanceCounter () для определения времени событий в нескольких приложениях? Кажется, что счетчик не будет надежным для приложений, работающих на нескольких ядрах.

2

Решение

Как насчет добавления приложения обмена, которое открывает клиентское соединение, а затем рассылает одно сообщение с отметкой времени, скажем, 10000 раз. Задержки будут складываться, и тогда вы сможете эффективно использовать временную метку, рассчитать время начала и поделить на 10000.

1

Другие решения

Как указывает Чад, QueryPerformanceCounter отлично работает для этой цели. Из MSDN «В общем, результаты счетчика производительности [из QPC] являются одинаковыми для всех процессоров в многоядерных и многопроцессорных системах, даже если они измеряются в разных потоках или процессах.» Упоминается только пара исключений …

  1. Предварительные операционные системы, работающие на определенных процессорах, могут нарушать эту последовательность …
  2. Различные темы могут быть отключены на 1 галочку. «Термин« тик »относится к периоду времени, равному 1 ÷ (частота счетчика производительности, полученная из QueryPerformanceFrequency).»
0

По вопросам рекламы [email protected]