Поиск по сайту:

Perf — инструмент мониторинга и анализа производительности для 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 вы можете обратиться к его man-странице за списком доступных подкоманд (вы можете рассматривать подкоманды как специальные параметры, открывающие определенное окно в систему). Для получения наилучших и более полных результатов используйте perf либо как root, либо через sudo.

Список производительности

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

Отображение списка предопределенных событий программного обеспечения в Linux:

perf list sw 

Статистика производительности

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

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

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

  1. Выполнение команды dd заняло 21,812281 миллисекунд процессора. Если мы разделим это число на значение «прошедшее время в секундах» ниже (23,914596 миллисекунд), получится 0,912 (загрузка ЦП).
  2. Во время выполнения команды 15 переключателей контекста (также известных как переключатели процессов) указывают на то, что процессоры переключались 15 раз с одного процесса (или потока) на другой.
  3. Миграция 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 аналогичен команде top тем, что отображает профиль системы практически в реальном времени (также известный как анализ в реальном времени).

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

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

perf top -a 

Отобразит все события, связанные с тактовой частотой процессора.

perf top -e cpu-clock 

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

Запись производительности

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

Введите запись производительности, а затем команду:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Отчет о производительности

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

sudo perf report

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

man perf-subcommand

где подкоманда – это список, стат, верх, запись или сообщить. Это наиболее часто используемые подкоманды; другие перечислены в документации (ссылку можно найти в разделе «Сводка»).

Краткое содержание

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

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

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