我正在寻找一些处理设置的程序最大 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 0x610
560。这意味着最大输出为 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