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