Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Аппаратное обеспечение

Что каждый программист должен знать о памяти.

Часть 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%. Процессор выполняет инструкции по порядку; точную последовательности выполнения, необходимую для получения правильного указателя инструкций, восстановить трудно. Самые последние версии процессоров пытаются это сделать для отдельных событий, но это, в общем, не стоит таких усилий или просто невозможно. В большинстве случаев это не имеет большого значения. Программист должен уметь даже в случае, если есть только выборка с нормальным распределением, определять, что происходит.


Назад Оглавление Вперед