Как использовать .. 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 мс на max и 1 мс на min. Помимо того факта, что avg не должно быть больше max (т. Е. Даже больше, я ожидаю, что avg будет не больше 2 мс - поскольку это - время цикла), оно фактически увеличивается, чем дольше я запускаю инструмент профилирования. Итак, если бы я запустил инструмент в течение получаса, 33 мс фактически были бы примерно 120 с. Таким образом, кажется, что avg - это на самом деле общее время, в течение которого поток занимает ЦП.

введите описание изображения здесь

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

введите описание изображения здесь

Итак, я прочитал вики сообщества QNX о "профилировщике приложений ", в т.ч. руководство по "Профилировщик нового приложения IDE Улучшения », а также статьи из официального руководства о том, как использовать инструмент профилировщика .. но я не мог понять, как я буду использовать этот инструмент в своих интересах.

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


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

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

person Jim McAdams    schedule 14.11.2015    source источник


Ответы (1)


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

person jwernerny    schedule 17.11.2015
comment
Спасибо @jwernerny. Мне потребовалось немного времени, чтобы понять, где искать, но, похоже, он определенно более убедителен для моей цели, чем Application Profiler. Я думал, что где-то читал, что профилировщик системы будет лучше всего работать с однопоточными приложениями, поэтому я не решался использовать его, но, похоже, это было заблуждением. - person Jim McAdams; 21.11.2015