使用统计执行分析器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
-------------------------------------------------------------------------------
之后,它会打印看似合理的调用图数据。
'超空间'警告意味着什么?是什么导致的?它会影响分析结果吗?我该如何解决?
答案 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。对于其他事件,它真的取决于 关于它们的发生频率。