OProfile — это средство мониторинга производительности системы, оказывающее минимальное влияние на её работу. Эта программа использует встроенные в процессор аппаратные возможности мониторинга производительности и собирает сведения о ядре и исполняемых модулях, в частности, статистику использования памяти, число обращений к кэшу второго уровня и полученных аппаратных прерываний. Чтобы использовать это средство в Red Hat Enterprise Linux, вы должны установить RPM-пакет oprofile.
Многие процессоры обладают специальными аппаратными возможности для мониторинга производительности. Они позволяют отслеживать определённые события (например, отсутствие запрашиваемых данных в кэше). Эти аппаратные средства обычно представлены в виде одного или нескольких счётчиков, увеличивающихся, когда происходит определённое событие. Когда значение счётчика доходит до предела, вызывается прерывание, что позволяет управлять детализацией мониторинга производительности (и связанными накладными расходами) .
OProfile использует эти аппаратные средства (или их замену с использованием таймера, где они отсутствуют) для проведения выборки данных производительности в момент, когда счётчик вызывает прерывание. Выбранные данные периодически записываются на диск, а затем они могут использоватся для формирования отчётов о производительности на уровне системы или приложений.
OProfile — полезное средство, но используя его, вы должны знать о некоторых ограничениях:
Использование общих библиотек — Выборки, выполненные в коде общих библиотек не сопоставляются с конкретным приложением, если не используется параметр --separate=library.
Показатели производительности могут быть неточны — Когда регистр мониторинга производительности вызывает обработчик, выполняющий выборку, обработка прерывания может быть не точной, как при исключении деления на ноль. Так как процессор может исполнять инструкции не по порядку, выборка может зафиксироваться для соседней инструкции.
opreport неправильно сопоставляет выборки с внутренними (inline) функциями — для определения функции, к которой относится адрес, opreport использует простую оценку диапазона адресов. Выборки, выполненные во внутренней функции, сопоставляются не с ней, а с функцией, включающей эту внутреннюю функцию.
OProfile накапливает данные нескольких запусков — OProfile — профилировщик уровня системы и рассчитан на неоднократный запуск и завершение процессов. Таким образом выборки, полученные при разных запусках, накапливаются. Чтобы очистить выборки предыдущих запусков, воспользуйтесь командой opcontrol --reset.
Не решает проблемы, связанные не только с процессором — Программа OProfile ориентирована на поиск проблем, область которых ограничена процессором. OProfile не определяет процессы, которые простаивают, ожидая снятия блокировки или какого-то другого события (например, пока устройство ввода/вывода закончит операцию).
В таблице 41-1 представлен краткий обзор средств, включённых в пакет oprofile.
Команда | Описание |
---|---|
op_help | Выводит список имеющихся событий процессора, а также краткое описание каждого. |
op_import | Преобразует файлы базы данных с выборками в формат данной системы из другого двоичного формата. Используйте эту возможность для анализа базы данных с выборками, созданной на другой платформе. |
opannotate | Выдаёт прокомментированный исходный код приложения, если оно было скомпилировано с отладочными символами. За подробностями обратитесь к разделу 41.5.3 Использование opannotate. |
opcontrol | Определяет множество собираемых данных. За подробностями обратитесь к разделу 41.2 Настройка OProfile. |
opreport | Выдаёт отчёт по собранным данным. За подробностями обратитесь к разделу 41.5.1 Использование opreport. |
oprofiled | Запускается в виде демона и периодически записывает выборки данных на диск. |
Таблица 41-1. Команды OProfile