Демон OProfile oprofiled периодически собирает выборки и сохраняет их в каталоге /var/lib/oprofile/samples/. Прежде чем анализировать эти данные, убедитесь в том, что в этом каталоге все необходимые данные сохранены, выполнив от имени root следующую команду:
opcontrol --dump
В имени каждого файла с данными отражено имя исполняемого модуля. Например, выборки события по умолчанию на процессоре Pentium III для /bin/bash будут называться:
\{root\}/bin/bash/\{dep\}/\{root\}/bin/bash/CPU_CLK_UNHALTED.100000
Для обработки уже собранных данных мониторинга предназначены следующие инструменты:
opreport
opannotate
Используйте эти инструменты и отслеживаемый двоичный код для построения отчётов, которые затем можно будет анализировать.
Предупреждение | |
---|---|
Чтобы проанализировать данные, помимо этих инструментов необходимо иметь отслеживаемый исполняемый код. Если этот код необходимо изменять после сбора данных, сделайте резервную копию не только файлов с показателями мониторинга, но и исполняемого модуля, мониторинг которого выполнялся. |
Выборки, связанные с каждым исполняемым файлом, сохраняются в отдельном файле. Выборки, связанные с динамически загружаемыми библиотеками, также сохраняются в отдельном файле. Если в процессе работы OProfile отслеживаемый исполняемый модуль изменяется, и существует файл с данными его мониторинга, этот файл автоматически удаляется. Таким образом, если существующий файл с данными необходим, его необходимо скопировать вместе с исполняемым модулем, прежде чем исполняемый модуль будет заменён новой версией. За подробными инструкциями по копированию файла данных обратитесь к разделу 41.4 Сохранение данных.
41.5.1. Использование opreport
Программа opreport предоставляет сводку по всем отслеживаемым исполняемым модулям.
Ниже приведён фрагмент вывода этой команды:
Profiling through timer interrupt TIMER:0| samples| %| ------------------ 25926 97.5212 no-vmlinux 359 1.3504 pi 65 0.2445 Xorg 62 0.2332 libvte.so.4.4.0 56 0.2106 libc-2.3.4.so 34 0.1279 libglib-2.0.so.0.400.7 19 0.0715 libXft.so.2.1.2 17 0.0639 bash 8 0.0301 ld-2.3.4.so 8 0.0301 libgdk-x11-2.0.so.0.400.13 6 0.0226 libgobject-2.0.so.0.400.7 5 0.0188 oprofiled 4 0.0150 libpthread-2.3.4.so 4 0.0150 libgtk-x11-2.0.so.0.400.13 3 0.0113 libXrender.so.1.2.2 3 0.0113 du 1 0.0038 libcrypto.so.0.9.7a 1 0.0038 libpam.so.0.77 1 0.0038 libtermcap.so.2.0.8 1 0.0038 libX11.so.6.2 1 0.0038 libgthread-2.0.so.0.400.7 1 0.0038 libwnck-1.so.4.9.0
Для каждого исполняемого модуля отводится отдельная строка. В первом столбце указывается число выборок, сделанных для этого исполняемого модуля. Во втором столбце указывается процентное отношение этого числа к общему числу выборок. В третьем столбе указывается имя исполняемого модуля.
Обратитесь к странице man opreport за списком доступных параметров командной строки, в число которых входит, например, параметр -r, сортирующий выводимые строки в порядке возрастания числа выборок для исполняемого модуля.
41.5.2. Использование opreport для одного исполняемого модуля
Чтобы получить более подробную информацию о конкретном исполняемом модуле, используйте opreport:
opreport <mode> <executable>
Здесь вместо <executable> необходимо указть полный путь к анализируемому исполняемому модулю. Параметр <mode> может принимать следующее значения:
- -l
Выводит список выбранных данных по символам. Например, ниже показан фрагмент результата выполнения команды opreport -l /lib/tls/libc-<version>.so:
samples % symbol name 12 21.4286 __gconv_transform_utf8_internal 5 8.9286 _int_malloc 4 7.1429 malloc 3 5.3571 __i686.get_pc_thunk.bx 3 5.3571 _dl_mcount_wrapper_check 3 5.3571 mbrtowc 3 5.3571 memcpy 2 3.5714 _int_realloc 2 3.5714 _nl_intern_locale_data 2 3.5714 free 2 3.5714 strcmp 1 1.7857 __ctype_get_mb_cur_max 1 1.7857 __unregister_atfork 1 1.7857 __write_nocancel 1 1.7857 _dl_addr 1 1.7857 _int_free 1 1.7857 _itoa_word 1 1.7857 calc_eclosure_iter 1 1.7857 fopen@@GLIBC_2.1 1 1.7857 getpid 1 1.7857 memmove 1 1.7857 msort_with_tmp 1 1.7857 strcpy 1 1.7857 strlen 1 1.7857 vfprintf 1 1.7857 write
В первом столбце указывается начальный адрес в виртуальной памяти (virtual memory address, vma). Во втором столбце указывается число выборок, сделанных для этого символа. Третий столбец показывает процентное отношение этого числа к общему числу выборок для исполняемого модуля, а четвёртый — имя символа.
Чтобы отсортировать результаты в обратном порядке, передайте в командной строке -r вместе с параметром -l.
- -i <symbol-name>
Выводит данные выборок, связанных с заданным символом. Например, ниже показан фрагмент результата выполнения команды opreport -l -i __gconv_transform_utf8_internal /lib/tls/libc-<version>.so:
samples % symbol name 12 100.000 __gconv_transform_utf8_internal
В первой строке приводится сводка по указанному символу/исполняемому модулю.
В первом столбце указывается число выборок, сделанных для этого символа в памяти. Во втором столбце указывается процентное отношение числа выборок по этому адресу в памяти к общему числу выборок, сделанных для этого символа. Название символа указывается в третьем столбце.
- -d
Выводит данные выборки по символам в более подробном виде, чем -l. Например, ниже показан фрагмент результата выполнения команды opreport -l -d __gconv_transform_utf8_internal /lib/tls/libc-<version>.so:
vma samples % symbol name 00a98640 12 100.000 __gconv_transform_utf8_internal 00a98640 1 8.3333 00a9868c 2 16.6667 00a9869a 1 8.3333 00a986c1 1 8.3333 00a98720 1 8.3333 00a98749 1 8.3333 00a98753 1 8.3333 00a98789 1 8.3333 00a98864 1 8.3333 00a98869 1 8.3333 00a98b08 1 8.3333
В результате выводятся те же данные, что и с параметром -l, только в данном случае для каждого символа показыватся используемый адрес виртуальной памяти. По каждому адресу показывается число выборок и процентное отношение этого числа к общему числу выборок для данного символа.
- -x <symbol-name>
Исключает из результатов указанные через запятую символы.
- session:<name>
Определяет полный путь к сеансу или каталогу относительно каталога /var/lib/oprofile/samples/.
41.5.3. Использование opannotate
Утилита opannotate пытается сопоставить выборки, полученные при выполнении конкретных инструкций, с соответствующими строками в исходном коде. В формируемых ей файлах слева от этих строк будут представлены полученные выборки. Она также помещает комментарий в начало листинга каждой функции, и помещает в него сводку по выборкам, полученным в этой функции.
Чтобы эта утилита работала, исполняемый модуль должен быть скомпилирован компилятором GCC с ключом -g. По умолчанию пакеты Red Hat Enterprise Linux компилируются без этого ключа.
Общий синтаксис opannotate выглядит так:
opannotate --search-dirs <src-dir> --source <executable>
В параметрах необходимо указать каталоги анализируемого исходного кода и исполняемой программы. За списком дополнительных параметров командной строки обратитесь к странице man opannotate.