我最近在我的平台上安装了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
现在我不知道应该如何解释这个输出。它是否预期输出?
另外,我应该怎样做&lt;不支持&gt;在这里提交,在运行命令之前,我需要启用哪些来支持此字段吗?
答案 0 :(得分:2)
这些行表明您正在运行的内核缺少对特定功能的支持,这些功能需要分析程序的这些方面。由于大多数perf都在内核空间中,因此您需要确保内核支持您需要的功能。
编辑:
在内核中启用这些功能时,它取决于。除非这些组件已编译为内核模块,否则您需要自己编译它们。如果将它们编译为模块,则只需modprobe
它们。尝试:
find /lib/modules/`uname -r` -regex .*perf.*
如果出现列表,请尝试modprobe
每个模块名称。否则,您需要自己编译模块或自己编译整个内核。
答案 1 :(得分:2)
在dmesg输出中搜索“性能事件”。它可能被禁用。
例如,在我的机器上,我有这个&gt;&gt;
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
答案 2 :(得分:0)
“不支持”通常是内核不支持perf,即使内核启用了perf模块也是如此。或者硬件没有像某些虚拟化硬件那样的性能计数器? 如果没有针对perf的内核支持,您可能会看到“未计数”
答案 3 :(得分:-1)
这取决于您想要分析的内容。 Perf没有提供最终答案,告诉你程序有多快。如果你想衡量表现,你必须知道在哪里看。对于那些说法,请尝试用-e标志手动给它们。比如perf stat -e cycles ./helloworld