8.7.2 OProfile

Предыдущая  Содержание  Следующая V*D*V

OProfile представляет собой инструмент профилирования для Linux. Он имеет возможность оценки производительности всей системы, включая ядро, совместно используемые библиотеки и приложения. Он также может быть использован в профилирования модулей ядра и обработчиках прерывания. Он незаметно работает в фоновом режиме собирая информацию при низких накладных расходов.

В этом разделе мы обсудим использование OProfile в ядре Linux версии 2.6. Для этого вам необходимо пересобрать ядро с установленной опцией CONFIG_OPROFILE. Кроме того, необходима кросс-компиляция OProfile для вашей целевой платформы. Для настройки OProfile для вашей целевой платформы, пожалуйста, следуйте инструкциям кросс-компиляции в Разделе 8.2 и инструкциям по установке OProfile, доступным по адресу http://oprofile.sourceforge.net.

Для записи различных событий, таких как циклы ЦП, промахи в кэше, сбросы TLB, и так далее, OProfile использует различные аппаратные счетчики производительности. В архитектурах, которые не имеют счётчиков производительности, для сбора данных OProfile использует прерывание часов реального времени. Если часы реального времени тоже не доступны, OProfile возвращается к прерыванию таймера. Вы также можете принудительно включить режим прерывания по таймеру, передав в командной строке загрузки ядра oprofile.timer = 1. Обратите также внимание, что различные события, такие как сброс TLB,  промахи в кэше и тому подобное, обычно связаны со счётчиками производительности, не доступными в режиме работы по часам реального времени/прерыванию по таймеру.

В этом разделе мы профилируем с помощью OProfile на ПК приложение видео-плеера, FFmpeg™ (http://ffmpeg.sourceforget.net). Идея этого примера в том, чтобы быстро ознакомить вас с OProfile. Для полноценного использования OProfile обратитесь к http://oprofile.sourceforge.net. Для профилирования FFmpeg выполняем описанные ниже шаги. Обратите внимание, что для выполнения команд OProfile вам необходимо иметь права суперпользователя.

 

1.Настройка OProfile: мы не хотим профилировать ядро.
 
# opcontrol --no-vmlinux
 

2.Запуск профилировщика:
 
# opcontrol –start
Using default event: GLOBAL_POWER_EVENTS:100000:1:1:1
Using 2.6+ OProfile kernel interface.
Using log file /var/lib/oprofile/oprofiled.log
Daemon started.
Profiler running.

 

3.Запуск приложения:
 
# cd /usr/local/bin
# ./ffplay_g /data/movies/matrix.mpeg &

 

4.Сбор данных: команду для сбора данных, а также вывод информации показывает Распечатка 8.10. Первый столбец вывода это общее количество измерений, сделанных в функции, а второй столбец показывает относительный процент от общего числа измерений для функции. Так как GLOBAL_POWER_EVENTS представляет процессорное время, мы можем говорить, что во время воспроизведения видео функция synth_filter использовала 28.8 процента от общего процессорного времени, в то время как функция mpeg_decode_mb использовала 16.5 процентов от общего процессорного времени.

5.Получение аннотированных исходных текстов: приложение должно быть скомпилировано с включённой отладкой. В этом примере аннотированные исходные файлы для всех измерений создаются в какталоге /usr/local/bin/ann.  Аннотированные исходники для символов synth_filter и mpeg_decode_mb содержат mpegaudiodec.c и mpeg12.c, соответственно. Пример их содержимого показан в Распечатке 8.11.

6.Получение полного отчёта о производительности системы:
 
# opreport --long-filenames
CPU: P4 / Xeon with 2 hyper-threads, speed 2993.82 MHz
(estimated)
Counted GLOBAL_POWER_EVENTS events (time during which
processor is not stopped) with a unit mask of 0x01
(count cycles when processor is active) count 100000
GLOBAL_POWER_E...|
samples|       %|
------------------
223651 73.9875 /no-vmlinux
22727   7.5185 /lib/tls/libc.so.6
15134   5.0066 /usr/bin/local/ffplay_g
7329    2.4246 /usr/bin/nmblookup
      ...
      ...
 

7.Выключение профилировщика:
 
# opcontrol --shutdown
 

Предыдущая  Содержание  Следующая