为啥 perf 无法收集任何样本?

Posted

技术标签:

【中文标题】为啥 perf 无法收集任何样本?【英文标题】:Why does perf fail to collect any samples?为什么 perf 无法收集任何样本? 【发布时间】:2015-09-13 05:34:12 【问题描述】:

sudo perf top 显示“事件:0 个周期”。

sudo perf record -ag sleep 10 显示

[ perf record: Woken up 1 time to write data ]
[ perf record: Captured and wrote 0.154 MB perf.data (~6725 samples) ]

但是,sudo perf report 显示“perf.data 文件没有样本!”。我还检查了记录的perf.data,并确认其中没有任何样本。

系统是“3.2.0-86-virtual #123-Ubuntu SMP Sun Jun 14 18:25:12 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux”。 性能版本 3.2.69

感谢您的意见。

【问题讨论】:

perf.data 的文件大小是多少?您如何使用 perf report 检查将跟踪信息转储为文本? 文件大小看起来正常:-rw------- 1 root root 146144 Sep 13 22:28 perf.data 【参考方案1】:

空闲的虚拟化系统上可能没有真正的样本(你的linux内核版本有“-virtual”后缀);或者可能无法访问默认使用的硬件计数器 (-e cycles)。

尝试分析一些真实的应用程序,例如

 echo '2^2345678%2'| sudo perf record /usr/bin/bc

同时检查软件计数器,如-e cpu-clock:

 echo '2^2345678%2'| sudo perf record -e cpu-clock /usr/bin/bc

您可以尝试perf stat (perf stat -d) 与相同的示例来找出您的系统中哪些基本计数器真正递增:

 echo '2^2345678%2'| sudo perf stat /usr/bin/bc

关于“(~6725 个样本)”输出 - perf 记录不计算其输出中的样本,它只是估计它们的计数,但这种估计总是错误的 .任何 perf.data 文件都有一些固定部分,没有任何样本,它在系统范围模式下可能使用数十 kb;并且估计错误地将这部分视为包含一些平均长度的事件。

【讨论】:

以上是关于为啥 perf 无法收集任何样本?的主要内容,如果未能解决你的问题,请参考以下文章

错误:perf.data 文件没有样本

Simpleperf 不记录任何样本

perf_event_open:包括在采样时执行子进程

当分析器无法收集样本时,如何调试无响应的服务器?

LIBSVM 对未训练类的样本给出相同的预测。为啥?

CoreAudio,收集准确数量的样本