是否可以使用 RAPL 来测量软件能耗?

nul*_*ull 5 performance energy consumption

我在各种不同的网站上读过有关 RAPL(运行平均功率限制)的内容,但我仍在寻找答案。我读到RAPL可以测量CPU能耗,或者整个系统的能耗。

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

sge*_*iou 5

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

sudo perf stat -r 5 -e power/energy-cores/,power/energy-ram. ./executable
Run Code Online (Sandbox Code Playgroud)

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

sudo sh -c 'echo -1 >/proc/sys/kernel/perf_event_paranoid'
sudo sysctl -w kernel.perf_event_paranoid=-1
Run Code Online (Sandbox Code Playgroud)

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


bpe*_*tit 1

最近有一个项目允许这样做:https://github.com/hubblo-org/scaphandre

他们还提供了一个示例仪表板,其中流程和服务消耗是隔离的: https: //metrics.hubblo.org