Библиотека сайта rus-linux.net
Что каждый программист должен знать о памяти.
Часть 9: Приложения и библиография
Назад | Оглавление | Вперед |
10.2 Как это все выглядит
Сессия oprofile может выглядеть достаточно просто:
$ opcontrol -i cachebench $ opcontrol -e INST_RETIRED:6000:0:0:1 --start $ ./cachebench ... $ opcontrol -h
Обратите внимание, что эти команды, в том числе сама программа, запускаются с правами пользователя root. Запуск программы в роли пользователя root осуществляется здесь только лишь для упрощения ситуации; программа может быть запущена любым пользователем и oprofile ее обнаружит. Следующим шагом является анализ данных. С помощью программы opreport мы увидим следующее:
CPU: Core 2, speed 1596 MHz (estimated) Counted INST_RETIRED.ANY_P events (number of instructions retired) with a unit mask of 0x00 (No unit mask) count 6000 INST_RETIRED:6000| samples| %| ------------------ 116452 100.000 cachebench
Это означает, что мы собрали целую кучу событий, и теперь можно использовать программу opannotate для того, чтобы более подробно изучить данные. Мы можем узнать, где в программе произошло наибольшее количество событий. Часть выходного потока команды opannotate --source
будет выглядеть следующим образом:
:static void :inc (struct l *l, unsigned n) :{ : while (n-- > 0) /* inc total: 13980 11.7926 */ : { 5 0.0042 : ++l->pad[0].l; 13974 11.7875 : l = l->n; 1 8.4e-04 : asm volatile ("" :: "r" (l)); : } :}
Это внутренняя функция теста, в которой тратится большая часть времени. Мы видим, что выборка распределена по всем трем строкам цикла. Основная причина этого в том, что выборка, когда это касается указателей на инструкции, не всегда точна на 100%. Процессор выполняет инструкции по порядку; точную последовательности выполнения, необходимую для получения правильного указателя инструкций, восстановить трудно. Самые последние версии процессоров пытаются это сделать для отдельных событий, но это, в общем, не стоит таких усилий или просто невозможно. В большинстве случаев это не имеет большого значения. Программист должен уметь даже в случае, если есть только выборка с нормальным распределением, определять, что происходит.
Назад | Оглавление | Вперед |