Использовать callgrind как профилировщик выборки? - PullRequest
2 голосов
/ 10 сентября 2010

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

  1. способ отключения лишних опций, чтобы записывать только минимальные данные для генерации времени, потраченного на различные стеки вызовов?
  2. Означает ли наследие cachegrind callgrind, что избыточная работа выполняется в отношении профилирования кэша и т. д.*
  3. Я предполагаю, что callgrind работает как отладчик.Можно ли это отрегулировать для выборки процесса с интервалами, а не для каждой отдельной инструкции?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

3) Callgrind работает как динамический переводчик, который обрабатывает оригинальный код счетным кодом. Инструментирование выполняется для каждой инструкции доступа к памяти в коде (для моделирования кэша) и (я предлагаю) для каждой jmp-подобной инструкции для отслеживания exec. отсчет каждого базового блока.

У меня есть небольшой профилировщик выборки, который действует как отладчик; Он вводит счетчик профилирования setitimer() в приложение, а затем перехватывает весь SIGALRM и печатает текущее значение $eip.

Ранее было несколько профилировщиков выборки с подходом setitimer, также есть profil() для чего-то подобного. Это используется glibc/gmon/gmon.c и gprof -p (точнее, gcc -pg). Функция profil() позволяет профилировать отдельный фрагмент кода с дискретизацией времени виртуального процессора каждые 1 или 10 миллисекунд. Также имеется функция sprofil().

Проверьте также LD_PRELOAD = / lib / libpcprofile.so PCPROFILE_OUTPUT = output.file - но я не знаю, работает ли он или как он работает

Для пронумерованных вопросов:

2) «Callgrind - это расширение Cachegrind. Оно предоставляет всю информацию, которую делает Cachegrind, плюс дополнительную информацию о callgraphs». - Таким образом, он может предоставить любой материал, находящийся в cachegrind, но также он позволяет пользователю отключить симуляцию кэша: --simulate-cache=no (это значение по умолчанию)

Для скорости: согласно http://www.valgrind.org/docs/manual/nl-manual.html - руководству по инструменту Nul valgrind (он же nulgrind), который не требует дополнительных инструментов, замедление составляет 5 раз. Это потому, что программа динамически переводится самим valgrind. Таким образом, не может быть никакого инструмента для valgrind, который может работать быстрее, чем nulgrind.

0 голосов
/ 05 сентября 2012

Попробуйте использовать Zoom из RotateRight.Он имеет конфигурацию «Thread Time», которая проверяет все потоки в одном процессе, независимо от того, запущены они или заблокированы.

0 голосов
/ 10 сентября 2010

Вы пробовали gprof? У него нет больших накладных расходов, как у valgrind.

...