OProfile警告“丢弃超空间样本”意味着什么?

时间:2012-03-17 23:55:31

标签: c linux profiling performance-testing oprofile

使用统计执行分析器OProfile可视化我的C应用程序的调用图配置文件时,它会多次包含以下警告。警告对我来说相当神秘:

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

我在Xen虚拟化环境中使用OProfile,如下所示:

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 个答案:

答案 0 :(得分:5)

Maynard Johnson在a message to a mailinglist中解释了这个警告:

  

有报道称由oprofile记录的样本   内核驱动程序似乎归因于错误的二进制文件   特别是如果采样率非常高或在做callgraph时   分析(因为callgraph分析,就像高采样率一样)   导致oprofile内核驱动程序的开销非常高   溢出其内部样本缓冲区)。我怀疑那是什么   你遇到了。不幸的是,这是一个非常阴险的错误   还没有人能够找到根本原因。内核驱动程序   报告内部缓冲区的溢出计数和oprofiled   日志打印出来。为方便起见,从oprofile 0.9.5开始,   opreport在发现非零溢出时也会打印警告   计算并建议降低采样间隔。

     

我建议您查看/var/lib/oprofile/samples/oprofiled.log和   找到上述配置文件运行的溢出统计信息(日志条目   有时间戳)。如果你只看到一些或非常小的   百分比(比如说,小于3%),你可能只是忽略了   异常。一般来说,为了避免/限制这种事情,你应该   在最低采样率实用的配置文件,尤其是当你   做callgraph分析。那么“实用”是什么意思呢?好,   与任何基于样本的分析器一样,oprofile本质上是统计的。   你拥有的数据点越多,你就越有信心   数据。因此,对于100%的信心,你应该(理论上)描述   计数值为'1'。但是,不太实用,因为你的机器   可能看似锁定,因为正在完成的大部分工作都是录音   样本。对于循环事件分析,您可以使用计数   价值几百万左右(在今天的处理器上)仍然是   非常自信的da ta。对于其他事件,它真的取决于   关于它们的发生频率。