方法 1

方法 1

我正在寻找一些处理设置的程序最大 TDP就像我们在 Windows 上的 Intel XTU 中所做的那样。我能够使用这个项目。我还可以使用以下方法监控 CPU 的 TDP这个优秀的项目。我在互联网上搜索过此类程序,但没有找到。

编辑1:

我的系统有一个 Core i7-9750H CPU,其最大 TDP 由 OEM 设置为 60 瓦,在 Ubuntu 18.04LTS 上运行,内核为 4.18.20-041820-generic。

编辑2

我已将内核更新至 5.3.0-46-generic (signed),输出sudo turbostat --Summary --interval 5 --show Avg_MHz,Busy%,Bzy_MHz,IRQ,PkgTmp,PkgWatt,GFXWatt如下:

...
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000168 (45 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x42835800dd8230 (UNlocked)
cpu0: PKG Limit #1: ENabled (70.000000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (107.000000 Watts, 0.002441* sec, clamp DISabled)
...

输出为rdmsr --bitfield 14:0 -d 0x610560。这意味着最大输出为 0.125 * 560 = 70 瓦

输出sudo rdmsr 0x610是42835800dd8230。

您能否详细说明计算情况@doug-smythies

答案1

对于你的处理器,酷睿 i7 9750H,默认 TDP 为 45 瓦。如果您的处理器支持,您可以调整 TDP。

方法 1

本例中使用了 i5-9600K。首先我使用 turbostat (linux-tools-common 包) 查看现在的 TDP 是多少,以及比例因子是多少:

doug@s18:~$ sudo turbostat --Summary --interval 5 --show Avg_MHz,Busy%,Bzy_MHz,IRQ,PkgTmp,PkgWatt,GFXWatt
...
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000002f8 (95 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x4283e800dd8320 (UNlocked)
cpu0: PKG Limit #1: ENabled (100.000000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (125.000000 Watts, 0.002441* sec, clamp DISabled)
...

因此,我们知道比例因子是 0.125 瓦,并且似乎有人已经将功率限制从默认的 95 瓦调整到 100 瓦,但让我们通过直接读取 MSR 来检查一下:

root@s18:/home/doug# rdmsr --bitfield 14:0 0x610
320

root@s18:/home/doug# rdmsr --bitfield 14:0 -d 0x610
800

请注意,我读取了寄存器两次,一次以十六进制(基数 16),一次以十进制(基数 10)。

并且 800 * 0.125 = 100 瓦。

现在,假设我想将其设置为 50 瓦,首先再次读取寄存器,但保留所有内容:

root@s18:/home/doug# rdmsr 0x610
4283e800dd8320

现在更改相应的位字段(将上面的 14 改为 0)。对于最低有效的 16 位,我们有:

8    3    2    0
1000 0011 0010 0000

取出 0x320 (以 10 为基数的 800)并代入 50 / 0.125 = 400 = 0x190:

8    1    9    0
1000 0001 1001 0000

root@s18:/home/doug# wrmsr 0x610 0x4283e800DD8190
root@s18:/home/doug# rdmsr 0x610
4283e800dd8190

并使用 turbostat 检查:

doug@s18:~$ sudo ~/turbostat --Summary --interval 5 --show Avg_MHz,Busy%,Bzy_MHz,IRQ,PkgTmp,PkgWatt,GFXWatt
...
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000002f8 (95 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x4283e800dd8190 (UNlocked)
cpu0: PKG Limit #1: ENabled (50.000000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (125.000000 Watts, 0.002441* sec, clamp DISabled)
... And now test it:
Avg_MHz Busy%   Bzy_MHz IRQ     PkgTmp  PkgWatt GFXWatt
0       0.02    921     205     29      1.90    0.00
0       0.03    834     195     29      1.90    0.00
14      0.42    3440    384     29      2.06    0.00
0       0.03    800     196     29      1.90    0.00
0       0.03    812     190     29      1.90    0.00
0       0.03    800     212     29      1.90    0.00  <<< System idle
0       0.03    811     204     29      1.90    0.00
3148    72.23   4358    9875    63      97.48   0.00  <<< Heavy load applied
3612    82.93   4355    11226   65      111.60  0.00  <<< Lots of power being used
3609    82.94   4351    11182   65      111.50  0.00
3120    83.35   3743    11145   45      72.32   0.00
2833    83.58   3389    11141   45      49.79   0.00  <<< Power limited to 50 watts
2838    83.58   3395    11179   45      49.85   0.00
2836    83.58   3393    11191   45      49.89   0.00
2837    83.58   3394    11119   46      49.90   0.00
2839    83.58   3397    11160   46      49.94   0.00
2838    83.58   3395    11148   46      49.91   0.00
2838    83.58   3395    11160   46      49.94   0.00
2838    83.58   3395    11284   46      49.94   0.00
654     19.28   3390    2807    32      12.97   0.00
0       0.03    803     202     32      1.90    0.00
0       0.03    802     172     32      1.90    0.00

参考:英特尔 SDM

方法 2

实际上有一个更简单的方法:

查看是否可以使用此方法:

doug@s18:~$ grep . /sys/class/powercap/intel-rapl/intel-rapl:0/*
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_max_power_uw:95000000
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_name:long_term
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw:100000000
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_time_window_us:27983872
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_max_power_uw:0
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_name:short_term
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_power_limit_uw:125000000
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_time_window_us:2440
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/device: Is a directory
/sys/class/powercap/intel-rapl/intel-rapl:0/enabled:1
/sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj:259409601961
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:0: Is a directory
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:1: Is a directory
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:2: Is a directory
/sys/class/powercap/intel-rapl/intel-rapl:0/max_energy_range_uj:262143328850
/sys/class/powercap/intel-rapl/intel-rapl:0/name:package-0
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/power: Is a directory
grep: /sys/class/powercap/intel-rapl/intel-rapl:0/subsystem: Is a directory

注意启用线和当前值(与上面一样):

    /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw:100000000
/sys/class/powercap/intel-rapl/intel-rapl:0/enabled:1

现在更改它并检查:

doug@s18:~$ echo "93500000" | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
doug@s18:~$ cat /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
93500000

并且用 turbostat 检查:

doug@s18:~$ sudo ./turbostat --Summary --interval 5 --show Avg_MHz,Busy%,Bzy_MHz,IRQ,PkgTmp,PkgWatt,GFXWatt
...
cpu0: MSR_PKG_POWER_LIMIT: 0x4203e800dc82ec (UNlocked)
cpu0: PKG Limit #1: ENabled (93.500000 Watts, 28.000000 sec, clamp DISabled)
...

请注意,在另一台计算机上,即使处理器已解锁并且位置显示为 root 可写,但这些功能也不起作用(无论哪种方法):

doug@s15:~$ ls -l /sys/class/powercap/intel-rapl/intel-rapl:0/enabled
-rw-r--r-- 1 root root 4096 Apr 26 08:00 /sys/class/powercap/intel-rapl/intel-rapl:0/enabled
doug@s15:~$ echo 1 | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/enabled
1
tee: '/sys/class/powercap/intel-rapl/intel-rapl:0/enabled': Function not implemented

相关内容