Приборы для профилирования и выборки - PullRequest
9 голосов
/ 12 января 2011

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

  • выборка: остановите выполнение программы, возьмите компьютер и, таким образом, определите, где программа
  • . Оснащение: добавьте некоторый служебный код в программупоэтому некоторые указатели будут знать программу

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

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

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

Я что-то упустил?

ура!=)

Ответы [ 2 ]

9 голосов
/ 12 января 2011

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

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

7 голосов
/ 12 января 2011

Зависит от того, насколько вы хотите быть традиционными.

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

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

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

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

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

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

...