[英]Understanding Perf Tool Output
我最近在我的平台上安装了Perf工具,并希望用它来分析我的平台。 我开始分析一个独立的应用程序。我用过的命令
perf start ./helloworld
'./helloworld'的效果统计信息:
4.555957 task-clock # 0.000 CPUs utilized
1 context-switches # 0.219 K/sec
0 cpu-migrations # 0.000 K/sec
124 page-faults # 0.027 M/sec
<not supported> cycles
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not supported> instructions
<not supported> branches
<not supported> branch-misses
60.005519331 seconds time elapsed
现在我不确定我应该如何解释这个输出。它是否预期输出?
此外,我应该在此处提交<不支持>的内容,在运行命令之前,是否需要启用任何支持此字段的内容?
这些行表明您正在运行的内核缺少对perf需要分析程序的这些方面的特定功能的支持。 由于大多数perf都在内核空间中,因此您需要确保内核支持您需要的功能。
编辑:
在内核中启用这些功能时,它取决于。 除非这些组件已编译为内核模块,否则您需要自己编译它们。 如果将它们编译为模块,则可以对它们进行modprobe
。 尝试:
find /lib/modules/`uname -r` -regex .*perf.*
如果出现列表,请尝试modprobe
每个模块名称。 否则,您需要自己编译模块或自己编译整个内核。
在dmesg输出中搜索“性能事件”。 它可能被禁用。
例如,在我的机器上,我有这个>>
Performance Events: SandyBridge events, Intel PMU driver.
PEBS disabled due to CPU errata.
CPUID marked event: 'cpu cycles' unavailable
CPUID marked event: 'instructions' unavailable
CPUID marked event: 'bus cycles' unavailable
CPUID marked event: 'cache references' unavailable
CPUID marked event: 'cache misses' unavailable
CPUID marked event: 'branch instructions' unavailable
CPUID marked event: 'branch misses' unavailable
“不支持”通常是内核不支持perf,即使内核已启用perf模块也是如此。 或者硬件没有像某些虚拟化硬件那样的性能计数器? 如果没有针对perf的内核支持,您可能会看到“未计算”
这取决于你想要描述的内容。 Perf没有提供最终答案,告诉你程序有多快。 如果你想衡量表现,你必须知道在哪里看。 对于那些说法,请尝试用-e标志手动给它们。 比如perf stat -e cycles ./helloworld
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.