【问题标题】:Is it possible to measure software energy consumption with RAPL?是否可以使用 RAPL 测量软件能耗?
【发布时间】:2020-02-05 22:42:05
【问题描述】:
我已在各种不同的网站上阅读了有关 RAPL(运行平均功率限制)的信息,但我仍在寻找答案。我读到RAPL可以测量CPU能耗,或者整个系统的功耗。
但是,我的问题是:如果我有一段用某种语言编写的代码,例如用 C 编写的 MergeSort,我可以使用 RAPL 来衡量它的能耗吗?像 jRAPL 这样的东西可以做,但不仅仅是 Java。如果是,我该怎么做?
【问题讨论】:
标签:
performance
energy
consumption
【解决方案1】:
这里是post,介绍如何获取不同系统的能量测量值。
这里的一些工具比其他工具更细粒度。就个人而言,我更喜欢使用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-cores 和energy-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) 尚不支持它。