在 ubuntu 上使用 powertop 和 energy_uj 进行功率测量得到不同的结果

在 ubuntu 上使用 powertop 和 energy_uj 进行功率测量得到不同的结果

我想在 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_ujfiles 方法
闲置的 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 的所有功耗,还是只测量部分功耗?如何测量所有功耗(在合理范围内),而无需购买特殊的功率测量插头?

相关内容