繁体   English   中英

了解Perf工具输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM