性能功耗测量:如何工作?

时间:2019-05-02 16:03:31

标签: cpu-architecture perf energy

我注意到perf list现在可以测量功耗了。您可以按如下方式使用它:

$ perf stat -e power/energy-cores/ ./a.out 
Performance counter stats for 'system wide':

              8.55 Joules power/energy-cores/

       0.949871058 seconds time elapsed

此测量的准确性如何?perf如何估算功耗?

2 个答案:

答案 0 :(得分:5)

power/energy-cores/ perf计数器基于称为MSR_PP0_ENERGY_STATUS的MSR寄存器,该寄存器是Intel RAPL接口的一部分(Intel似乎将每个RAPL MSR称为RAPL接口)。基于系统活动事件的复杂模型用于估计(静态和动态)能耗。 MSR寄存器名称中有PP0,它表示电源平面0,电源平面0是RAPL域之一,其中包含套接字的所有核心,包括核心的专用缓存。但是,PP0不包括最后一级的高速缓存,互连,内存控制器,图形处理器以及非核心中的所有其他内容。无法测量MSR_PP0_ENERGY_STATUS的准确性,因为没有其他方法只能估算电源平面0的能耗。

虽然可以测量其他RAPL域的准确性。这些包括Package,DRAM和PSys域。例如,可以通过与整个系统的能耗(可以使用电表测量)进行比较,并运行使包装外部的所有组件的能耗保持已知的工作量,来测量“包装”域能耗估算的准确性尽可能恒定。 MSR_PKG_ENERGY_STATUSMSR_DRAM_ENERGY_STATUS的准确性已由许多人在许多不同的处理器上以不同的方式进行了测量。您可以参考最近发表的标题为RAPL in Action: Experiences in Using RAPL for Power Measurements的论文以获取更多信息,其中还包括以前的作品摘要。论文涵盖了桑迪桥,常春藤桥,哈斯韦尔和Skylake。结论是MSR_PKG_ENERGY_STATUSMSR_DRAM_ENERGY_STATUS在Haswell和Skylake上似乎是准确的(在Haswell上实现已更改,请参见:An Energy Efficiency Feature Survey of the Intel Haswell Processor)。但这不一定适用于所有类型的工作负载,P状态和处理器。因此,准确性不仅仅取决于微体系结构。

在英特尔手册第3卷的第14.9节中讨论了RAPL接口。我注意到该节中有错误。例如,它说客户端处理器不支持DRAM域,这是不正确的。我用来编写此答案的客户端Haswell处理器支持DRAM域。本节可能已过时,仅适用于Sandy Bridge和Ivy Bridge处理器。我认为最好阅读要使用RAPL的处理器的数据表。

power/energy-pkg/ perf计数器可用于测量封装域的能耗。从Sandy Bridge开始,这是已知的所有Intel处理器都支持的唯一域。

答案 1 :(得分:4)

在x86系统上,这些值基于RAPL(Running Average Power Limit)-RAPL(提供内置CPU能量计数器)的接口。 AMD最初是由Intel设计的,但它还在Zen系统上提供了兼容的接口。

精度取决于实际的微体系结构。最初,RAPL受具有一定偏差的模型的支持。自Haswell架构以来,在Intel CPU上,它基于非常精确的测量。据我所知,对AMD Zen RAPL实施的准确性还没有很好的了解。

您必须考虑的重要一件事是测量范围。在大多数系统上,仅覆盖封装和DRAM 1 。因此,如果您需要了解整个系统消耗的功率/能量,通常您就无法轻松地通过RAPL来回答。

还请注意,RAPL每1毫秒更新一次,因此较短的工作负载将因更新率而产生重大错误。

1-Skylake Desktop系统 可以实现整个系统的RAPL。精度取决于制造商。

相关问题