У меня есть программа, в которой значительное количество времени тратится на загрузку и сохранение данных. Теперь я хочу знать, сколько времени занимает каждая функция в процентах от общего времени выполнения. Однако я хочу исключить время, затрачиваемое на загрузку и сохранение функций, из общего времени, учитываемого профилировщиком. Есть ли способ сделать это с помощью gprof или любого другого популярного профайлера?
Профилирование частичных программ в Linux
Ответы (4)
Точно так же вы можете использовать
valgrind --tool=callgrind --collect-atstart=no --toggle-collect=<function>
Другие варианты для просмотра:
--instr-atstart # to avoid runtime overhead while not profiling
Чтобы получить статистику уровня обучения:
--collect-jumps=yes
--dump-instr=yes
В качестве альтернативы вы можете «удаленно управлять» им на лету: callgrind_control
или аннотировать свой исходный код (IIRC также со статистикой предсказания переходов): callgrind_annotate
.
Превосходный инструмент kcachegrind
— это замечательный инструмент визуализации/навигации. Я едва могу рекомендовать это достаточно:
valgrind
и kcachegrind
замечательная пара!
- person Michael Mior; 08.07.2011
Я бы подумал об использовании чего-то более современного, чем gprof
, например OProfile
. При создании отчета с помощью opreport
вы можете использовать опцию --exclude-symbols
, чтобы исключить функции, которые вас не интересуют.
Дополнительные сведения см. на веб-странице OProfile; однако краткое руководство см. на странице документации OProfile.
Zoom от RotateRight предлагает общесистемный профиль времени для Linux. Если ваш код проводит много времени в операциях ввода-вывода, то это время не будет отображаться в профиле времени ЦП. В качестве альтернативы, если вы хотите учитывать время, затрачиваемое на ввод-вывод, попробуйте «профиль времени потока».
для простого, базового решения вам может понадобиться регистрировать данные в CSV-файл.
например Формат [functionKey,timeStamp\n]
... затем загрузите это в Excel. Получите дельты, а затем включите или исключите их на основе функций if. Ничего фантастического. С другой стороны, вы можете получить некоторые визуализации довольно дешево.
gprof
на самом деле хорош (при условии, что у вас нет рекурсии), потому что он не производит выборку во время ввода-вывода. - person Mike Dunlavey   schedule 08.07.2011