Утилита рerf#

Описание#

Утилита perf измеряет и анализирует производительность различных операций в ядре и пользовательском пространстве, включая использование процессора, памяти, дисковой подсистемы и других ресурсов.

Для этого perf использует аппаратные счетчики производительности (Performance Monitoring Units, PMU) оборудования и точки трассировки ядра. Полученные данные анализируются и представляются в человекочитаемом формате.

Синтаксис утилиты:

perf <options> <command> <args>

Где:

  • <options> - опции;

  • <command> - команда;

  • <args> - агрументы.

Опции#

Часто используемые опции утилиты представлены в таблице ниже.

Опции perf#

Опция

Описание

-h, --help

Вывести справочную информацию

-v, --version

Отобразить информацию о версии

--list-opts

Вывести возможные опции

--list-cmds

Вывести наиболее часто используемые команды

--debugfs-dir

Указать каталог debugfs или переменную среды PERF_DEBUGFS_DIR

--debug-file <file>

Записывать вывод отладки в указанный файл <file>

--debug <level>

Установить значения (<level>) от 0 до 10 для переменной отладки. Чем выше установленное значение, тем подробнее вывод

Команды#

Ниже перечислены часто используемые команды утилиты perf:

  • Команда perf help выводит список команд утилиты. Опции -a или--all выводят все доступные команды.

  • Команда perf stat предоставляет статистику по различным событиям, включая выполненные команды и затраченные тактовые циклы.

  • Команда perf record записывает данные в файл perf.data, который может быть позже проанализирован с помощью команды perf report.

  • Команда perf report считывает и отображает данные о производительности из файла perf.data.

    Вместе с командой можно использовать следующие опции:

    • --demangle - выводить имена символов в человекочитаемом формате. Включено по умолчанию;

    • --demangle-kernel - выводить имена символов ядра в человекочитаемом формате;

    • --no-demangle - отключить вывод имен символов в человекочитаемом формате.

  • Команда perf list выводит список предопределенных событий, доступных на машине. Эти события будут варьироваться в зависимости конфигурации аппаратного и программного обеспечения.

  • Команда perf top выводит информацию о профиле производительности процессора в режиме реального времени. Функционирует аналогично утилите top. Но в отличие от нее показывает, сколько времени ЦП использует каждая функция.

  • Команда perf trace отслеживает системные вызовы, используемые указанным потоком или процессом, и все сигналы, получаемые приложением.

Примеры использования#

  • Чтобы включить сбор данных о производительности приложения ./sample, используйте команду:

    perf record ./sample
    
  • Чтобы вывести отчет, где имена функций C++ будут отражены в человекочитаемом формате, используйте команду:

    perf report --demangle --demangle-kernel
    

    Пример вывода:

    Samples: 7 of event 'task-clock:ppp', Event count (approx.): 1750000
    Overhead Command Shared Object Symbol
    14.29% hello_world [kernel.kallsyms] [k] __lookup_mnt
    14.29% hello_world [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore
    14.29% hello_world [kernel.kallsyms] [k] do_user_addr_fault
    14.29% hello_world ld-linux-x86-64.so.2 [.] _dl_relocate_object
    14.29% hello_world ld-linux-x86-64.so.2 [.] do_lookup_x
    14.29% hello_world ld-linux-x86-64.so.2 [.] mmap64
    14.29% hello_world ld-linux-x86-64.so.2 [.] strcmp