Прежде чем 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 Pro | i386/ppro | 2 |
Pentium II | i386/pii | 2 |
Pentium III | i386/piii | 2 |
Pentium 4 (без Hyper-Threading) | i386/p4 | 8 |
Pentium 4 (c Hyper-Threading) | i386/p4-ht | 4 |
Athlon | i386/athlon | 4 |
AMD64 | x86-64/hammer | 4 |
Itanium | ia64/itanium | 4 |
Itanium 2 | ia64/itanium2 | 4 |
TIMER_INT | timer | 1 |
IBM eServer iSeries и pSeries | timer | 1 |
ppc64/power4 | 8 | |
ppc64/power5 | 6 | |
ppc64/970 | 8 | |
IBM eServer S/390 и S/390x | timer | 1 |
IBM eServer zSeries | timer | 1 |
Таблица 41-2. Процессоры и счётчики OProfile
Воспользуйтесь таблицей 41-2, чтобы проверить, был ли правильно определён тип процессора, и узнать, сколько событий можно отслеживать одновременно. Тип timer применяется в случае, если процессор не имеет поддерживаемых аппаратных средств мониторинга прозводительности.
Если используется тип timer, назначить события для процессора нельзя, так как в нём отсутствует аппаратная поддержка счётчиков производительности. Вместо этих счётчиков для мониторинга используется прерывание по таймеру.
Если в качестве типа процессора используется не timer, отслеживаемые события можно изменить и по умолчанию нулевой счётчик связывается с событием, происходящим по времени. Если в процессоре есть несколько счётчиков, по умолчанию другие счётчики не связываются с событием. Отслеживаемые по умолчанию события показаны в таблице 41-3.
Процессор | Событие по умолчанию для счётчика | Описание |
---|---|---|
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64 | CPU_CLK_UNHALTED | Тактовый генератор процессора не остановлен |
Pentium 4 (HT и не HT) | GLOBAL_POWER_EVENTS | Время, в течение которого процессор не останавливался |
Itanium 2 | CPU_CYCLES | Такты процессора |
TIMER_INT | (отсутствует) | Выборка по каждому прерыванию от таймера |
ppc64/power4 | CYCLES | Такты процессора |
ppc64/power5 | CYCLES | Такты процессора |
ppc64/970 | CYCLES | Такты процессора |
Таблица 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> может быть следующим:
none — не разделять профили (по умолчанию)
library — создавать профили библиотек в разрезе приложений
kernel — создавать профили ядра и его модулей в разрезе приложений
all — создавать профили библиотек и профили ядра и его модулей в разрезе приложений
Если используется вариант --separate=library, имя файла с выборками включает имя исполняемого файла, а также имя файла библиотеки.