了解Perf工具输出

时间:2013-11-03 13:46:50

标签: linux profiling perf

我最近在我的平台上安装了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;在这里提交,在运行命令之前,我需要启用哪些来支持此字段吗?

4 个答案:

答案 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