观察 Linux 上程序的能量使用情况的最佳方法是什么?

观察 Linux 上程序的能量使用情况的最佳方法是什么?

我正在做研究,想了解我编写的两个算法的能耗信息,但我没有钱购买专用设备。我计划运行这两个程序 5 分钟,并想测量它们的能耗比率(例如,程序 A 消耗的功率(瓦​​)是程序 B 的 1.2 倍)

我做了一些研究,发现如下命令

upower -d

但即使阅读了手册后,我也不确定如何正确地解释它,并且想知道是否有比这更好的解决方案。

我在裸机笔记本电脑上使用以下发行版:

uname -a
Linux linuxbox 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

答案1

在 Linux 中,高效利用能源的重要性日益增加。越来越多的基准测试将能源使用情况作为附加评估标准。

本答案使用 turbostat 程序,该程序适用于大多数现代 Intel 处理器、部分 AMD 处理器以及其他处理器。它有多个软件包,虽然上游保证不依赖内核版本,但 Ubuntu 将其包装在非常严格的依赖包装器

我将用 1 分钟而不是 5 分钟,但这里的建议是进行多次测试。

首先,测量空闲能量,可能要测量更长时间。观察空闲能量消耗的稳定性,即噪声有多大。请注意,我实际上捕获并绘制了几个小时的空闲数据。有时在测试期间会发生一些 cron 作业或其他意外情况,因此最好多次运行测试,以便异常值更加明显。在进行任何测试之前,至少等待 5 分钟(最好是 15 分钟)重新启动,让系统稳定下来。

哦,顺便检查一下你的计数器环绕限制:

doug@s18:~$ sudo ./turbostat --num_iterations 1
...
RAPL: 2759 sec. Joule Counter Range, at 95 Watts
...

未来的读者请注意:上述检查将不需要,因为待处理的补丁将让 turbostat 负责处理环绕问题。

闲置的:

doug@s18:~$ sudo ./turbostat --Summary --quiet --Joules --show Pkg_J --interval 60
Pkg_J
78.97
77.71
74.75
74.37
74.44
74.42
74.72
74.50
74.97
74.79
74.53
74.52
74.39
74.32
74.30
74.35
74.41
74.41
74.63
74.71

去掉前两个样本,平均结果为 74.53 焦耳。

现在在测试程序运行时获取能量数据。最好的方法是针对特定测试程序,这本身就是一个主题。假设能量消耗与时间的关系恒定(否则我们应该采样并绘图),并且程序可以继续在某个循环中运行,以便轻松获取多个样本。:

doug@s18:~$ sudo ./turbostat --Summary --quiet --Joules --show Pkg_J ~/c/consume 40 73 60 1
Ave. work percent: 44.343601
60.002474 sec
Pkg_J
174.13

以上就是:intel_cpufreqCPU 频率调节驱动程序和ondemandCPU 频率调节调节器。现在有了performance调节器,以便引入变化:

doug@s18:~$ sudo ./turbostat --Summary --quiet --Joules --show Pkg_J ~/c/consume 40 73 60 1
Ave. work percent: 29.533655
60.002356 sec
Pkg_J
240.78

这并不相关,但我正在使用的程序参数平均工作/睡眠标称比率为 40%,但每个间隔要做固定的工作(因此 29% 仅适用于性能)、73 赫兹工作/睡眠率、60 秒。

方法 2,更多样本。如果程序可以循环运行(可能来自脚本),则需要更多样本,以便可以识别和忽略异常值:

一经请求:

doug@s18:~$ sudo ./turbostat --Summary --quiet --Joules --show Pkg_J --interval 60
Pkg_J
188.11
178.26
178.68
179.42
180.86
183.31
183.31
186.55

平均:182.31 焦耳

表现:

doug@s18:~$ sudo ./turbostat --Summary --quiet --Joules --show Pkg_J --interval 60
Pkg_J
241.97
245.07
244.82
253.09
263.40
261.08
255.77
251.53

平均:252.09 焦耳

因此,对于这个 1 分钟的示例:
按需 = 182.31 - 74.53 = 107.78 焦耳(1.80 瓦)
性能 = 252.09 - 74.53 = 177.56 焦耳(2.96 瓦)

注意:这个答案是用能量焦耳来表示的,但也可以用功率瓦特来表示。例如:

doug@s18:~$ sudo ./turbostat --Summary --quiet --show PkgWatt --interval 60
PkgWatt
3.07
3.08
3.12
3.24

以上就是处理器组件的能量/功率,但主电源功耗如何呢?对于这台计算机,运行上述程序(按需)时功耗为 38.84 瓦,不运行上述程序时功耗为 36.83 瓦,相差 2 瓦,而上述程序为 1.80 瓦。

答案2

你见过吗powertop?powertop 是一个进程监视器,类似于htop、 或top,但它会为每个进程提供以瓦特为单位的估计功耗。你可以使用 csv 模式--csv=output.csv收集 csv 格式的数据。在这里查看:

Powertop 信息和下载网站

相关内容