我想在 Linux 上使用软件测量整个 PC 的功耗。我尝试了以下两种方法这里和这里:
使用powertop
:
rm -f powertop.csv
sudo powertop -q -t 60 -C powertop.csv
cat powertop.csv | grep -i --color 'baseline power'
使用/sys/class/powercap/intel-rapl*/energy_uj
文件:
time=60
sum_1=$(cat /sys/class/powercap/intel-rapl*/energy_uj | awk 'BEGIN { sum = 0; } { sum += $1; } END { print sum; }' "$@");
echo "before" $sum_1
sleep $time;
sum_2=$(cat /sys/class/powercap/intel-rapl*/energy_uj | awk 'BEGIN { sum = 0; } { sum += $1; } END { print sum; }' "$@");
echo "after" $sum_2
res=$(echo "(($sum_2 - $sum_1) / 1000000) / $time" | bc -l)
echo "Used power: $res W"
1. 为什么两种方法的结果不同?
在高负载下运行时(3 次测试的平均值):
- 方法,
powertop
返回 64.8 W - 方法
energy_uj
返回文件 138 W
该 CPU 的 TDP 指定为 65 W,因此我猜想该powertop
方法更准确,但问题是为什么?为什么结果不同?energy_uj
文件到底存储了什么?powertop
它的数据从哪里获取?
2. 此方法能测量所有电力使用情况吗?
我在不同负载下进行了测量。这些是结果。
powertop 方法 |
energy_uj files 方法 |
|
---|---|---|
闲置的 | 1.2 瓦 | 9 瓦 |
CPU重负载 | 64.8 瓦 | 138 瓦 |
igpu 重载 | 40.6 瓦 | 110 瓦 |
gpu重负载 | 14.1 瓦 | 27 瓦 |
当 TDP 指定为 47 W(比 powertop 测量结果大 3.5 倍)时,我预计 gpu 重负载测试的结果会大得多。测试期间 gpu 使用率在 95% 范围内。您认为这种方法测量的是整个 PC 的所有功耗,还是只测量部分功耗?如何测量所有功耗(在合理范围内),而无需购买特殊的功率测量插头?