首页 > 解决方案 > 是否可以使用 RAPL 测量软件能耗?

问题描述

我已经在各种不同的站点中阅读了有关 RAPL(运行平均功率限制)的信息,但我仍在寻找答案。我读到RAPL可以测量CPU能耗,或者整个系统的功耗。

但是,我的问题是:如果我有一段用某种语言编写的代码,例如用 C 编写的 MergeSort,我可以使用 RAPL 来衡量它的能耗吗?jRAPL 之类的东西能够做到,但不仅仅是 Java。如果是,我该怎么做?

标签: performanceenergyconsumption

解决方案


这是一篇关于如何获得不同系统的能量测量的帖子。这里的一些工具比其他工具更细粒度。就个人而言,我更喜欢使用Perf从正在运行的应用程序中收集能量测量值。Perf 也使用 RAPL 接口,它对命令行用户很方便,但仅限于 Linux 发行版。使用 Perf,您可以通过以下方式测量任何类型的可执行文件:

sudo perf stat -r 5 -e power/energy-cores/,power/energy-ram. ./executable

以上将为您提供可执行文件的能耗输出(可以是任何用 Java、C、Python 等编写的程序)。这-r 5意味着它将运行测试 5 次以提供统计结果。但是,这将为您提供平均值而不是中值结果。除此之外energy-coresenergy-ram您还可以从其他组件(例如处理器上的 GPU)获取测量值。请注意,这sudo是必需的,因为 perf 正在从英特尔处理器中的机器特定寄存器收集测量值。如果您想避免sudo每次都使用,请事先运行以下命令:

sudo sh -c 'echo -1 >/proc/sys/kernel/perf_event_paranoid'
sudo sysctl -w kernel.perf_event_paranoid=-1

尽管您可以使用 Perf 从许多 Linux 发行版中获取能量测量结果,但 Raspbian (Raspberry Pi) 尚不支持它。


推荐阅读