Профилировщики инструментов против отбора проб

StackOverflow https://stackoverflow.com/questions/4671003

  •  10-10-2019
  •  | 
  •  

Вопрос

Я провожу исследование между профилировщиками в основном инструментальных инструментов и отбора проб. Я придумал следующую информацию:

  • выборка: прекратите выполнение программы, возьмите ПК и, таким образом, выводил программу
  • Инструментализация: добавьте в программу немного накладных кодов, чтобы он увеличил некоторые указатели, чтобы узнать программу

Если вышеупомянутая информация неверна, поправьте меня.

После этого я смотрел на время исполнения, а некоторые сказали, что инструмент занимает больше времени, чем выборки! это правильно?

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

Я что-то упускаю?

ваше здоровье! знак равно

Это было полезно?

Решение

Прерывания, сгенерированные профилировщиком отбора проб, как правило, добавляют незначительное количество времени к общему времени выполнения, если у вас нет очень короткого интервала выборки (например, <1 мс).

При инструментальном профилировании могут быть большие накладные расходы, например, на небольших функциях листьев, которые вызываются много раз, так как вызовы в библиотеку инструментов могут быть значимыми по сравнению со временем выполнения функции.

Другие советы

Это зависит от того, насколько обычным вы хотите быть.

gprof Обе вещи, которые вы упомянули. Вот несколько комментариев по этому поводу.

Существует школа мысли, которая говорит, что профилирование - это измерение. ЧЕМ измерение? Что ж, все - просто измерение. Наряду с этим говорит о том, что то, что вы хотите получить, является «большой картиной» того, что происходит. Эта школа в основном смотрит на то, чтобы найти «медленные функции», не четко определяя, что это даже означает, и не говоря, чтобы вы смотрели там, чтобы оптимизировать.

Другая школа говорит, что вы действительно отладки. Вы хотите точно найти ошибки определенного рода - те, которые не делают программу неверной, скорее, они занимают слишком много времени. Это не широкие вещи. Это очень точные моменты в коде, где происходит что -то, что стоит намного больше времени, чем необходимо. Сколько еще больше не важно. Важно то, что он расположен, чтобы его можно было исправить. На этой точке зрения профилирование накладных расходов не имеет значения, как и точность измерения. Для того, чтобы измерение было для того, чтобы увидеть, сколько времени было сохранено.

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

Я в второй школе, и Вот пример из того, что вы можете сделать с этим.

Вот более краткое обсуждение проблем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top