Описание тега perf
От https://perf.wiki.kernel.org/index.php/Main_Page:
perf
начинал как инструмент для использования подсистемы счетчиков производительности в Linux, и в него были внесены различные улучшения для добавления возможностей трассировки.Счетчики производительности - это аппаратные регистры ЦП, которые подсчитывают аппаратные события, такие как выполненные инструкции, перенесенные ошибки в кэше или ошибочные прогнозы ветвлений. Они формируют основу для профилирования приложений, чтобы отслеживать динамический поток управления и определять горячие точки.
perf
предоставляет обширные обобщенные абстракции по конкретным аппаратным возможностям. Помимо прочего, он предоставляет счетчики для каждой задачи, процессора и рабочей нагрузки, выборку поверх них и аннотацию событий исходного кода.
Perf изначально поддерживается в популярных дистрибутивах Linux, включая Red Hat Enterprise Linux и Debian (linux-tools
пакет).
perf
используется с несколькими подкомандами (короткий, неисчерпывающий список):
stat
: запускает команду и собирает статистику счетчика производительности;top
: отображает динамический вид сверху самых горячих функций;record
: запускает команду и записывает свой профиль вperf.data
;report
: анализ файла, сгенерированногоperf record
; может генерировать плоский или графический профиль;annotate
читаетperf.data
(созданоperf record
) и отображает аннотированный код.
Пример вывода sudo perf stat tree /proc
:
# started on Mon Aug 15 23:52:19 2016
Performance counter stats for 'tree /proc':
3929,205496 task-clock # 0,681 CPUs utilized
79325 context-switches # 0,020 M/sec
33 CPU-migrations # 0,000 M/sec
273 page-faults # 0,000 M/sec
5745409809 cycles # 1,462 GHz [49,96%]
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
1465748665 instructions # 0,26 insns per cycle [74,84%]
329884771 branches # 83,957 M/sec [75,30%]
36420135 branch-misses # 11,04% of all branches [74,74%]
5,765637169 seconds time elapsed