为啥 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 无法收集任何样本?的主要内容,如果未能解决你的问题,请参考以下文章