4

我最近在我的平台上安装了 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

现在我不确定我应该如何解释这个输出。它是预期的输出吗?

另外,我应该如何处理此处提交的<不支持>,在运行命令之前我需要启用什么来支持此文件吗?

4

4 回答 4

3

在 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
于 2013-11-06T17:04:27.997 回答
2

这些行表明您正在运行的内核缺少对 perf 分析程序的这些方面所需的特定功能的支持。由于大多数性能都在内核空间中,因此您需要确保您的内核支持您需要的功能。

编辑:

在内核中启用这些功能时,这取决于。除非这些组件已编译为内核模块,否则您需要自己编译它们。如果它们被编译为模块,您可以只使用modprobe它们。尝试:

find /lib/modules/`uname -r` -regex .*perf.*

如果出现列表,modprobe请尝试输入每个模块名称。否则,您需要自己编译模块或整个内核。

于 2013-11-03T13:50:43.427 回答
0

“不支持”通常是指即使内核启用了 perf 模块,内核也不支持 perf。或者硬件没有像某些虚拟化硬件那样的性能计数器?如果没有内核对 perf 的支持,您可能会看到“not counted”

于 2013-11-11T22:20:22.960 回答
-1

这取决于您要描述的内容。Perf 没有提供最终答案,告诉您程序有多快。如果你想衡量性能,你必须知道去哪里看。对于那些说 的行,请尝试通过 -e 标志手动提供它们。像 perf stat -e 循环 ./helloworld

于 2013-11-03T14:00:26.687 回答