41.2. Настройка OProfile

Прежде чем OProfile можно будет запустить, его необходимо настроить. Как минимум, необходимо выбрать, включить ли мониторинг ядра или нет. В следующих разделах рассказывается о том, как настроить OProfile с помощью утилиты opcontrol. При выполнении команд opcontrol параметры настройки сохраняются в файле /root/.oprofile/daemonrc.

41.2.1. Указание ядра

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

Чтобы включить мониторинг ядра, выполните от имени root следующую команду:

opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux

ЗамечаниеЗамечание
 

Чтобы работал мониторинг ядра, должен быть установлен пакет debuginfo (содержащий несжатое ядро).

Чтобы отключить мониторинг ядра в OProfile, выполните от имени root следующую команду:

opcontrol --setup --no-vmlinux

Эта команда также загружает модуль ядра oprofile, если он не загружен и создаёт каталог /dev/oprofile/, если он не существует. За подробным описанием этого каталога обратитесь к разделу 41.6 Рассмотрение /dev/oprofile/.

ЗамечаниеЗамечание
 

Даже если в OProfile выключен мониторинг ядра, тем не менее должно работать SMP-ядро, чтобы из него можно было загрузить модуль oprofile.

Выбор собирать ли показатели ядра влияет только на то, какие данные собираются, но не на то, как и где хранятся собранные данные. Чтобы узнать, как использовать для показателей ядра и библиотек приложений разные файлы, обратитесь к разделу 41.2.3 Разделение профилей ядра и пространства пользователя.

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

Многие процессоры предоставляют счётчики, которые позволяют OProfile отслеживать определённые события. Как показывает таблица 41-2, в разных процессорах доступно разное число счётчиков.

Процессортип процессораЧисло счётчиков
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (без Hyper-Threading)i386/p48
Pentium 4 (c Hyper-Threading)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
IBM eServer iSeries и pSeriestimer1
 ppc64/power48
 ppc64/power56
 ppc64/9708
IBM eServer S/390 и S/390xtimer1
IBM eServer zSeriestimer1

Таблица 41-2. Процессоры и счётчики OProfile

Воспользуйтесь таблицей 41-2, чтобы проверить, был ли правильно определён тип процессора, и узнать, сколько событий можно отслеживать одновременно. Тип timer применяется в случае, если процессор не имеет поддерживаемых аппаратных средств мониторинга прозводительности.

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

Если в качестве типа процессора используется не timer, отслеживаемые события можно изменить и по умолчанию нулевой счётчик связывается с событием, происходящим по времени. Если в процессоре есть несколько счётчиков, по умолчанию другие счётчики не связываются с событием. Отслеживаемые по умолчанию события показаны в таблице 41-3.

ПроцессорСобытие по умолчанию для счётчикаОписание
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDТактовый генератор процессора не остановлен
Pentium 4 (HT и не HT)GLOBAL_POWER_EVENTSВремя, в течение которого процессор не останавливался
Itanium 2CPU_CYCLESТакты процессора
TIMER_INT(отсутствует)Выборка по каждому прерыванию от таймера
ppc64/power4CYCLESТакты процессора
ppc64/power5CYCLESТакты процессора
ppc64/970CYCLESТакты процессора

Таблица 41-3. События по умолчанию

Число одновременно отслеживаемых событий определяется числом счётчиков процессора. Однако они не соответствуют один-к-одному; на некоторых процессорах определённые события должны быть сопоставлены с конкретными счётчиками. Чтобы определить число доступных счётчиков, выполните следующую команду:

cat /dev/oprofile/cpu_type

Набор доступных событий зависит от типа процессора. Чтобы определить, какие события можно отслеживать, выполните от имени root следующую команду (результаты команды зависят от типа процессора):

op_help

События для каждого счётчика можно настраивать в командной строке или в графическом интерфейсе. За дополнительными сведениями о графическом интерфейсе обратитесь к разделу 41.8 Графический интерфейс. Если счётчик нельзя сопоставить с заданным событием, выводится сообщение об ошибке.

Чтобы назначить событие для настраиваемого счётчика в командной строке, используйте opcontrol:

opcontrol --event=<event-name>:<sample-rate>

Замените <event-name> точным названием события, полученным от команды op_help, а <sample-rate> числом событий между выборками.

41.2.2.1. Частота выборки

По умолчанию выбирается набор событий, связанных с таймером. При этом выборка выполняется через каждые 100000 тактов процессора. Если используется прерывание таймера, таймер программируется на базовую частоту, изменить которую пользователь не может. Если тип процессора не timer, для каждого события можно задать частоту выборки. Частота выборки определяет, через сколько событий будут сниматься показания.

Назначая события для счётчика, также можно указать частоту выборки:

opcontrol --event=<event-name>:<sample-rate>

Замените <sample-rate> числом событий между выборками. Чем меньше это число, тем чаще снимаются показания. Небольшие значения могут потребоваться для событий, происходящих нечасто, чтобы не пропустить происходящие события.

ВниманиеВнимание
 

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

41.2.2.2. Маски

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

Маски любого события показывает команда op_help. Значения масок даются в шестнадцатеричном виде. Чтобы указать несколько масок, их шестнадцатеричные значения нужно сложить, используя операцию «логическое или».

opcontrol --event=<event-name>:<sample-rate>:<unit-mask>

41.2.3. Разделение профилей ядра и пространства пользователя

По умолчанию при каждом событии собираются показатели режима ядра и пользовательского режима. Чтобы OProfile не учитывал события определённого счётчика в режиме ядра, выполните следующую команду:

opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:0

Чтобы снова начать отслеживания этого счётчика в режиме ядра, выполните следующую команду:

opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:1

Чтобы OProfile не учитывал события определённого счётчика в пользовательском режиме, выполните следующую команду:

opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:0

Чтобы снова начать отслеживания этого счётчика в пользовательском режиме, выполните команду:

opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:1

Когда демон OProfile записывает отслеживаемые данные в файлы с выборками, он может разделять данные отслеживания ядра и библиотек, записывая их в разные файлы. Чтобы выбрать режим записи файлов с выборками, выполните он имени root следующую команду:

opcontrol --separate=<choice>

Параметр <choice> может быть следующим:

Если используется вариант --separate=library, имя файла с выборками включает имя исполняемого файла, а также имя файла библиотеки.