4

当使用统计执行分析器 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
-------------------------------------------------------------------------------

之后,它会打印看似合理的调用图数据。

“超空间”警告是什么意思?是什么原因造成的?它会影响分析结果吗?我该如何解决?

4

1 回答 1

5

Maynard Johnson 在给邮件列表的消息中解释了这个警告:

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

我建议查看您的 /var/lib/oprofile/samples/oprofiled.log 并找到上述配置文件运行的溢出统计信息(日志条目带有时间戳)。如果您只看到很少或非常小的百分比(例如,小于 3%),您可能可以忽略异常。一般来说,为了避免/限制这种事情,你应该以最低的采样率进行分析,尤其是在你进行调用图分析时。那么我所说的“实用”是什么意思?好吧,与任何基于样本的分析器一样,oprofile 本质上是统计的。你拥有的数据点越多,你对数据的信心就越大。因此,为了 100% 的置信度,您应该(理论上)使用计数值“1”进行分析。不过不太实用,因为您的机器可能会出现锁定,因为正在完成的大部分工作是记录样本。对于周期事件分析,您可能使用数百万左右的计数值(在当今的处理器上)并且仍然对数据非常有信心。对于其他事件,这实际上取决于它们的发生频率。

于 2012-03-17T23:57:11.037 回答