3) Callgrind работает как динамический транслятор, который устанавливает исходный код прибора с кодом счетного инструмента. Инструментарий выполняется для каждой инструкции доступа к памяти в коде (для моделирования кэша) и (я предлагаю) для каждой команды, подобной jmp, для отслеживания exec. подсчет каждого базового блока.
У меня есть небольшой профилировщик пробоотбора, который действует как отладчик; Он вводит в приложение setitimer()
профилирующий счетчик и затем перехватывает все SIGALRM и печатает текущее значение $eip
.
Были некоторые пробоотборники выборки с приближением setitimer
, также есть profil()
для чего-то вроде. Это используется glibc/gmon/gmon.c
и gprof -p
(точнее, gcc -pg
). profil()
функция способна проецировать одиночный фрагмент фрагмента фрагмента с выборкой времени виртуального процессора каждые 1 или 10 миллисекунд. Существует также функция sprofil()
.
Проверьте также LD_PRELOAD =/Библиотека/libpcprofile.so PCPROFILE_OUTPUT = output.file - но я не знаю, это работает и как это работает
Для пронумерованных вопросы:
2) «Callgrind является расширение Cachegrind. Оно предоставляет всю информацию, которую делает Cachegrind, а также дополнительную информацию о callgraphs. " - Так что он может обеспечить любой материал, который находится в похожем на Cachegrind, но и позволяет пользователю отключить моделирование кэша: --simulate-cache=no
(это значение по умолчанию)
Для скорости: По http://www.valgrind.org/docs/manual/nl-manual.html - руководство по Нул инструмента VALGRIND (ака nulgrind), что не требует дополнительного инструментария, замедление составляет 5 раз. Это потому, что программа динамически переводится самой valgrind. Таким образом, не может быть никакого инструмента для valgrind, который может работать быстрее, чем nulgrind.
К сожалению, gprof не выполняет выборку, он _only_ подсчитывает _CPU_ время для инструментальных функций. (Не стесняйтесь исправлять меня, если вы знаете лучше, но это то, что я понимаю). –
http://sourceware.org/binutils/docs/gprof/Implementation.html#Implementation «Профилирование также подразумевает просмотр вашей программы по мере ее запуска и сохранение гистограммы того, где встречается счетчик программ, время от времени."- поэтому гистограмма из gprof на самом деле представляет собой профиль выборки pc – osgx
http://sourceware.org/binutils/docs/gprof/Flat-Profile.html#Flat-Profile - Плоский профиль основан в основном на выборке.' gprof -p ', первые два столбца. – osgx