Perf – инструмент мониторинга и анализа производительности для Linux

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

Perf- A Performance Monitoring and Analysis Tool for Linux

В день жесткой конкуренции между компаниями важно научиться использовать то, что у нас есть, наилучшим образом. Трата аппаратных или программных ресурсов или неумение использовать их более эффективно в конечном итоге становится потерей, которую мы просто не можем себе позволить, если мы хотим быть на вершине своей игры.

В то же время мы должны быть осторожны, чтобы не довести наши ресурсы до предела, где их постоянное использование приведет к необратимому ущербу.

В этой статье мы познакомим вас с относительно новым инструментом анализа производительности и предоставим советы, которые вы можете использовать для мониторинга ваших систем Linux, включая аппаратное обеспечение и приложения. Это поможет вам обеспечить их работу так, чтобы вы могли производить желаемые результаты, не тратя ресурсы или свою собственную энергию.

Представляем и устанавливаем Perf в Linux

Среди прочего, Linux предоставляет инструмент мониторинга и анализа производительности, удобно называемый perf. Так в чем отличие perf от других хорошо известных вам инструментов?

Ответ в том, что perf предоставляет доступ к Блоку мониторинга производительности в ЦП, и таким образом позволяет нам близко рассмотреть поведение аппаратного обеспечения и связанные с ним события.

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

Вы можете установить perf в дистрибутивах на основе RPM с помощью:

# yum update && yum install perf     [CentOS / RHEL / Fedora]
# dnf update && dnf install perf     [Fedora 23+ releases]

В Debian и его производных:

# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Если uname -r в указанной выше команде возвращает дополнительные строки помимо фактической версии (3.2.0-23-generic в моем случае), вам может потребоваться ввести linux-tools-3.2.0-23 вместо использования вывода uname.

Также важно отметить, что perf дает неполные результаты при запуске в гостевой системе поверх VirtualBox или VMWare, так как они не позволяют доступ к аппаратным счетчикам, как это делают другие технологии виртуализации (например, KVM или XEN).

Кроме того, имейте в виду, что некоторые команды perf могут быть ограничены для root по умолчанию, что можно отключить (до перезагрузки системы) сделав:

# echo 0 > /proc/sys/kernel/perf_event_paranoid

Если вам нужно отключить режим параноидальный навсегда, обновите следующий параметр в файле /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Подкоманды

После установки perf вы можете обратиться к его странице руководства для получения списка доступных подкоманд (подкоманды можно рассматривать как специальные опции, открывающие определенное окно в систему). Для лучших и более полных результатов используйте perf либо как root, либо через sudo.

Список Perf

perf list (без опций) возвращает все символьные типы событий (длинный список). Если вы хотите просмотреть список событий, доступных в конкретной категории, используйте perf list, за которым следует название категории ([hw|sw|cache|tracepoint|pmu|event_glob]), например:

Показать список предопределенных программных событий в Linux:

# perf list sw 
List Software Pre-defined Events in Linux

Статистика Perf

perf stat запускает команду и собирает статистику производительности Linux во время выполнения такой команды. Что происходит в нашей системе, когда мы запускаем dd?

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Collects Performance Statistics of Linux Command

Показанные выше статистики указывают, среди прочего:

  1. Выполнение команды dd заняло 21.812281 миллисекунд ЦП. Если мы разделим это число на значение “прошедшее время в секундах” ниже (23.914596 миллисекунд), получится 0.912 (использование ЦП).
  2. Во время выполнения команды было совершено 15 контекстных переключений (также известных как переключения процессов), что указывает на то, что ЦП был переключен 15 раз с одного процесса (или потока) на другой.
  3. 2 миграции ЦП – ожидаемый результат при равномерном распределении нагрузки на 2-ядерном ЦП между ядрами.
    За это время (21.812281 миллисекунд) было потрачено общее количество циклов ЦП, равное 62,025,623, что при делении на 0.021812281 секунд дает 2.843 ГГц.
  4. Если мы разделим количество циклов на общее количество инструкций, мы получим 4.9 Циклов на инструкцию, что означает, что каждая инструкция в среднем занимает почти 5 циклов ЦП для выполнения. Мы можем в чем-то винить в этом (по крайней мере, частично) количество ветвлений и промахов в ветвях (см. ниже), которые в конечном итоге приводят к потере или неправильному использованию циклов ЦП.
  5. При выполнении команды было обнаружено общее количество 3,552,630 ветвлений. Это представление на уровне ЦП точек принятия решений и циклов в коде. Чем больше ветвлений, тем ниже производительность. Для компенсации за это все современные ЦП пытаются предсказать поток кода. 51,348 промахов в ветвях указывают на то, что функция предсказания ошибалась 1.45% времени.

Тот же принцип применяется к сбору статистики (или, другими словами, профилированию) во время работы приложения. Просто запустите нужное приложение и после разумного периода времени (который выбираете вы) закройте его, и perf отобразит статистику на экране. Анализируя эти данные, вы можете выявить потенциальные проблемы.

Perf top

perf top похож на команду top, поскольку отображает практически реальный профиль системы (также известный как анализ в реальном времени).

С опцией -a будут отображены все известные типы событий, в то время как опция -e позволит выбрать конкретную категорию событий (как возвращается командой perf list):

Отобразит все события циклов.

perf top -a 

Отобразит все события, связанные с cpu-clock.

perf top -e cpu-clock 
Live Analysis of Linux Performance

Первый столбец в выводе выше представляет процент отобранных образцов с начала выполнения, сгруппированных по символу функции и общему объекту. Дополнительные опции доступны в man perf-top.

Perf record

perf record запускает команду и сохраняет статистические данные в файл с именем perf.data в текущем рабочем каталоге. Он работает аналогично perf stat.

Введите perf record, за которым следует команда:

# perf record dd if=/dev/null of=test.iso bs=10M count=1
Record Command Statistical Data

Perf report

perf report форматирует собранные данные в perf.data выше в отчет о производительности:

# sudo perf report
Perf Linux Performance Report

У всех вышеперечисленных подкоманд есть отдельная страница руководства, которую можно вызвать так:

# man perf-subcommand

Где подкоманда является либо списком, статистикой, топом, записью или отчетом. Это наиболее часто используемые подкоманды; другие перечислены в документации (см. раздел “Сводка” для ссылки).

Сводка

В этом руководстве мы представили вам perf, инструмент мониторинга и анализа производительности для Linux. Мы настоятельно рекомендуем вам ознакомиться с его документацией, которая поддерживается по адресу https://perf.wiki.kernel.org.

Если вы обнаружите приложения, потребляющие большой процент ресурсов, вы можете рассмотреть возможность изменения исходного кода или использовать другие альтернативы.

Если у вас есть вопросы по этой статье или предложения по улучшению, мы всегда готовы выслушать. Не стесняйтесь обращаться к нам, используя форму комментариев ниже.

Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/