Использовать callgrind в качестве профайлера пробоотбора?

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

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

Ответы

Ответ 1

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 (aka nulgrind), которое не требует дополнительных инструментов, замедление составляет 5 раз. Это потому, что программа динамически переводится самой valgrind. Таким образом, не может быть никакого инструмента для valgrind, который может работать быстрее, чем nulgrind.

Ответ 2

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

Ответ 3

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