Команда Linux perf

Linux 命令大全Справочник команд Linux


perf — это набор инструментов для анализа производительности системы Linux, полное название которого — Performance Event Counters. Он основан на подсистеме perf_events ядра Linux и может предоставлять возможности анализа производительности как на аппаратном, так и на программном уровне.

Основные функции perf включают:

  • Анализ производительности CPU
  • Трассировка вызовов функций
  • Статистика аппаратных событий
  • Мониторинг программных событий
  • Трассировка системных вызовов

Базовый синтаксис perf

Базовый формат синтаксиса команды perf:

perf [--version] [--help] COMMAND [ARGS]

Обычные подкоманды включают:

  • stat: Статистика счётчиков производительности
  • record: Запись данных о производительности
  • report: Анализ записанных данных
  • top: Мониторинг производительности в реальном времени
  • list: Вывести список доступных событий
  • annotate: Анализ на уровне исходного кода

Подробное объяснение распространённых подкоманд perf

perf stat

Подсчитывать различные аппаратные и программные события во время выполнения команды.

perf stat [options] command [command-options]

Общие параметры:

  • -e: Указать событие для мониторинга
  • -p: Мониторить указанный идентификатор процесса
  • -a: Мониторить все процессоры
  • -r: Повторять запуск и отображать среднее значение
  • -d: Отображать более подробные события

Пример:

Пример

# Подсчитать выполнение команды ls
perf stat ls

# Мониторинг указанного процесса
perf stat -p 1234

# Мониторинг определённых событий
perf stat -e cycles,instructions,cache-misses ls

perf record

Запись данных производительности в файл (по умолчанию: perf.data).

perf record [options] command [command-options]

Общие параметры:

  • -g: Записывать граф вызовов
  • -F: Частота сэмплирования (Hz)
  • -p: Запись для указанного процесса
  • -o: Указать выходной файл
  • -e: Указать события для записи

Пример:

Пример

# Запись выполнения команды ls
perf record ls

# Запись процесса 1234 с частотой 99Hz
perf record -F 99 -p 1234 -g

perf report

Проанализировать данные, записанные perf record.

perf report [options]

Общие параметры:

  • -i: Указать входной файл
  • -n: Показать количество выборок
  • --stdio: Вывод в текстовом режиме
  • -g: Показать граф вызовов
  • -s: Сортировать по указанному полю

Пример:

Пример

# Проанализировать файл perf.data по умолчанию
perf report

# Проанализировать указанный файл и вывести в текстовом режиме
perf report -i perf.data.old --stdio

perf top

Отображать наиболее ресурсоёмкие функции в системе в реальном времени.

perf top [options]

Общие параметры:

  • -e: Указать событие мониторинга
  • -p: Отслеживать указанный процесс
  • -K: Скрыть символы ядра
  • -U: Скрыть символы пользовательского пространства
  • -g: Показать граф вызовов

Пример:

Пример

# Мониторинг производительности системы в реальном времени
perf top

# Отслеживать определённое событие
perf top -e cache-misses

perf list

Вывести список всех отслеживаемых событий.

perf list [hw|sw|cache|tracepoint|pmu|event_glob]

Пример:

Пример

# Вывести список всех событий
perf list

# Вывести список аппаратных событий кэша
perf list cache

Типы событий perf

perf может отслеживать несколько типов событий:

Тип события Описание Пример
Аппаратные Аппаратные события CPU cycles, instructions
Программные Программные события ядра context-switches, page-faults
Кэширование События, связанные с кэшем cache-references, cache-misses
Точки трассировки Статические точки трассировки ядра syscalls, block, sched
PMU События, специфичные для процессора (зависит от производителя)
Точки останова События точек останова mem:[:access]

Практические примеры применения perf

1. Анализ узких мест производительности программы

Пример

# Запись выполнения программы
perf record -g ./my_program

# Анализ результатов
perf report -g

2. Поиск функций с горячими точками ЦП

perf top -p $(pidof my_program)

3. Сравнение различий производительности между двумя запусками

Пример

# Первый запуск
perf record -o perf.data.1 ./my_program input1

# Второй запуск
perf record -o perf.data.2 ./my_program input2

# Сравнение различий
perf diff perf.data.1 perf.data.2

4. Анализ системных вызовов

Пример

# Список доступных точек трассировки системных вызовов
perf list 'syscalls:*'

# Трассировка системного вызова open
perf stat -e 'syscalls:sys_enter_open' -a sleep 10

Советы по использованию perf

  1. Снижение накладных расходов: Для длительного анализа производительности соответствующим образом уменьшите частоту сэмплирования (например, -F 99)

  2. Разрешение символов: Убедитесь, что отладочные символы доступны; можно установить пакеты отладки или скомпилировать программу с -g

  3. Генерация пламенных графов: Используйте вместе с инструментом FlameGraph для создания наглядных графиков анализа производительности

  4. Многоядерный анализ: Используйте опцию -a для мониторинга всех CPU или -C для указания конкретных CPU

  5. Разделение пространства пользователя и ядра: Используйте опции -k и -u для анализа пространства ядра и пользователя соответственно


Устранение неполадок

  1. Проблемы с правами доступа:

    echo -1 > /proc/sys/kernel/perf_event_paranoid

    или запустите perf с sudo

  2. Отсутствие информации о символах:

    • Убедитесь, что программа скомпилирована с опцией -g
    • Установите пакеты с отладочными символами
  3. Слишком большой объём данных сэмплирования:

    • Уменьшите частоту сэмплирования
    • Сократите время сэмплирования
    • Используйте --no-call-graph, чтобы уменьшить объём информации о графе вызовов
  4. Не удаётся разобрать высокоуровневые языки, такие как Java/Python:

    • Требуется поддержка perf для конкретного языка
    • Попробуйте использовать инструменты анализа для конкретного языка

Дополнительные учебные ресурсы

  1. Официальная документация: каталог tools/perf/Documentation в исходном коде ядра Linux

  2. Рекомендации по книгам:

    • 《Systems Performance: Enterprise and the Cloud》
    • "Производительность систем: предприятие и облако"
  3. Онлайн-ресурсы:

    • Блог и набор инструментов Брендана Грегга
    • Набор инструментов perf-tools
  4. Связанные инструменты:

    • FlameGraph: визуализация данных о производительности
    • bpftrace: более гибкая динамическая трассировка

Освоив команду perf, вы сможете глубоко анализировать характеристики производительности систем Linux, быстро находить узкие места производительности и оптимизировать приложения и конфигурации системы.


Linux 命令大全Справочник команд Linux

Другие расширения