Как использовать.. QNX Momentics Application Profiler?

Я хотел бы профилировать мое (многопоточное) приложение с точки зрения времени. Предполагается, что некоторые потоки часто активируются повторно, то есть поток выполняет свое основное задание один раз в каждый фиксированный интервал времени. Другими словами, есть фиксированный интервал времени, в который все потоки повторно активируются.

Точнее, я ожидаю, что определенные потоки активируются каждые 2 мс (так как это период цикла). Я сделал несколько упрощенных измерений, которые подтвердили, что 2 мс действительно эффективны.

Для более точного профилирования моего приложения было целесообразно использовать инструмент Momentics "Application Profiler". Однако, когда я делаю это, я не могу интерпретировать выбранные мной временные цифры. Меня также интересует среднее и минимальное и максимальное время, необходимое для повторной активации определенного потока. Пока кажется, что идея состоит в том, чтобы иметь возможность отслеживать только время, которое занимают определенные функции. Однако даже это, похоже, не совсем так. Например, у меня есть 2 строки кода, которые буквально расположены рядом друг с другом:

if (var1 && var2 && var3) var5=1; занимает 1 мс (в среднем)

if (var4) var5=0; занимает 5 мс (в среднем)

Что это должно сказать мне?

Меня смущает другое: родительский поток "занимает" 33 мс на avg, 2 мс на макс и 1 мс на мин. Помимо того факта, что значение avg не должно быть больше, чем max (то есть даже больше, я ожидаю, что значение avg будет не больше 2 мс - поскольку это время цикла), оно на самом деле увеличивается, чем дольше я запускаю инструмент профилирования. Так что, если бы я запустил инструмент в течение получаса, 33 мс были бы чем-то вроде 120 с. Таким образом, кажется, что avg - это общее количество времени, которое поток занимает процессору.

Если это так, я бы предположил, что смог бы компенсировать общее время, используя показатель подсчета, который тоже не работает. Главным образом из-за того, что рисунок почти никогда не доступен - то есть существует только как отдельная запись списка (для каждого родительского потока), называемая который не представляет конкретную область процесса.

Итак, я прочитал вики сообщества QNX о "Application Profiler", в т.ч. руководство о "Новые возможности IDE Application Profiler", а также официальные статьи руководства о том, как использовать инструмент профилировщика... но я не мог понять, как использовать этот инструмент для удовлетворения своих интересов.

Итог: я почти уверен, что неправильно истолковал и неправильно использовал инструмент для того, для чего он был предназначен. Таким образом, мой вопрос - как бы я интерпретировал числа или использовал обратную связь инструмента, чтобы подтвердить время цикла в 2 мс?


Дополнительная информация

  • Процессор: одноядерный
  • QNX SDP 6.5 / Momentics 4.7.0
  • Метод профилирования: выборка и счетчик вызовов
  • Область применения профилирования: одно приложение
  • Я включил "Построить для профилирования (выборки и инструментов учета вызовов)" в опциях сборки 1

1 ответ

Решение

Системный профилировщик должен дать вам то, что вы ищете. Он подключается к микроядру и позволяет вам видеть состояние всех потоков в системе. Я использовал его в аналогичной настройке, чтобы узнать, что наша система получала неожиданные тайм-ауты. (Причиной оказалось появление страниц в критических потоках.)

Другие вопросы по тегам