Что означает предупреждение OProfile «отбрасывание образца гиперпространства»? - PullRequest
4 голосов
/ 18 марта 2012

При использовании профилировщика статистического выполнения OProfile для визуализации профиля графа вызовов для моего приложения C он несколько раз включает следующее предупреждение. Предупреждение довольно загадочно для меня:

warning: dropping hyperspace sample at offset 1af9 >= 2be8 for binary /home/myuser/mybinary

Я использую OProfile в виртуализированной среде Xen, например:

modprobe oprofile timer=1
opcontrol --no-vmlinux
opcontrol --start
(wait for profiling data to accumulate)
opcontrol --stop
opreport --session-dir=/var/lib/oprofile --exclude-dependent --demangle=smart \
--symbols /home/myuser/mybinary --callgraph

Полный вывод последней команды:

Overflow stats not available
CPU: CPU with timer interrupt, speed 0 MHz (estimated)
Profiling through timer interrupt
warning: dropping hyperspace sample at offset 84d0 >= 79a0 for binary /home/myuser/mybinary
warning: dropping hyperspace sample at offset 7ac0 >= 79a0 for binary /home/myuser/mybinary
warning: dropping hyperspace sample at offset 7d90 >= 79a0 for binary /home/myuser/mybinary
warning: dropping hyperspace sample at offset 7ac0 >= 79a0 for binary /home/myuser/mybinary
warning: dropping hyperspace sample at offset 7d90 >= 79a0 for binary /home/myuser/mybinary
warning: dropping hyperspace sample at offset 8210 >= 79a0 for binary /home/myuser/mybinary
samples  %        symbol name
-------------------------------------------------------------------------------

После этого он печатает правдоподобные данные графа вызовов.

Что означает предупреждение о гиперпространстве? Что вызывает это? Влияет ли это на результаты профилирования? Как я могу это исправить?

1 Ответ

5 голосов
/ 18 марта 2012

Мейнард Джонсон объясняет это предупреждение в сообщении в список рассылки :

В некоторых случаях сообщалось, что выборки, записанные драйвером oprofile, относятся к неправильнымдвоичный файл, в частности, если частота выборки очень высока или когда выполняется профилирование графа вызовов (поскольку профилирование графа вызовов, как и высокая частота выборки, также приводит к очень высокой нагрузке на драйвер ядра oprofile и переполнению его внутренних буферов выборки).Я подозреваю, что это то, что вы сталкиваетесь.К сожалению, это очень коварная ошибка, и пока никто не смог найти причину.Драйвер ядра сообщает о количестве переполнений своих внутренних буферов, и журнал oprofiled их выводит.Для удобства, начиная с oprofile 0.9.5, opreport также выводит предупреждение, когда находит ненулевые значения переполнения, и предлагает уменьшить интервал выборки.

Я предлагаю заглянуть в ваш /var/lib/oprofile/samples/oprofiled.log и найти статистику переполнения для указанного выше запуска профиля (записи журнала имеют временные метки).Если вы видите только несколько или очень маленький процент (скажем, менее 3%), вы можете просто игнорировать аномалии.В общем, чтобы избежать / ограничить такого рода вещи, вы должны профилировать с наименьшей практической частотой дискретизации, особенно когда вы выполняете профилирование с помощью callgraph.Так что я подразумеваю под «практическим»?Ну, как и с любым профилировщиком на основе выборки, oprofile имеет статистический характер.И чем больше у вас данных, тем больше уверенности в них.Таким образом, для 100% уверенности, вы должны (теоретически) профилировать со значением счетчика '1'.Однако это не слишком практично, поскольку ваша машина может заблокироваться, поскольку большая часть выполняемой работы - это запись сэмплов.Для профилирования событий циклов вы, вероятно, можете использовать значение счетчика в несколько миллионов или около того (на современных процессорах) и при этом быть достаточно уверенным в данных.Для других событий это действительно зависит от частоты их возникновения.

...