AMD Ryzen 笔记本电脑忽略 tlp 设置的最大 CPU 频率

AMD Ryzen 笔记本电脑忽略 tlp 设置的最大 CPU 频率

这是在 Kubuntu 22.04 LTS 上。

为了延长 Ryzen 9 5900HX 笔记本电脑的电池寿命,我安装了该tlp服务并在 /etc/tlp.conf 中对其进行了如下配置(此处未提及的所有配置均保持不变):

CPU_SCALING_GOVERNOR_ON_AC=ondemand
CPU_SCALING_GOVERNOR_ON_BAT=conservative
CPU_SCALING_MAX_FREQ_ON_AC=4680000
CPU_SCALING_MAX_FREQ_ON_BAT=1800000

频率设置正确,可以从以下结果看出:cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq

1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000
1800000

不幸的是,CPU 不尊重这些频率,通过以下方式验证:grep MHz /proc/cpuinfo

当所有核心都处于繁忙状态时,最大频率似乎会受到一定程度的尊重,就像下面的结果一样:

cpu MHz         : 2180.130
cpu MHz         : 2179.499
cpu MHz         : 2178.976
cpu MHz         : 2176.884
cpu MHz         : 2176.504
cpu MHz         : 2175.368
cpu MHz         : 2174.998
cpu MHz         : 2173.944
cpu MHz         : 2173.575
cpu MHz         : 2172.539
cpu MHz         : 2172.196
cpu MHz         : 2171.268
cpu MHz         : 2170.889
cpu MHz         : 2169.865
cpu MHz         : 2169.522
cpu MHz         : 2168.473

然而,当只使用少数核心的时候,画面其实是这样的:

cpu MHz         : 2967.377
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 3004.301
cpu MHz         : 400.000
cpu MHz         : 1710.000
cpu MHz         : 2863.831
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 1440.000
cpu MHz         : 4029.349
cpu MHz         : 400.000
cpu MHz         : 400.000

因此在我看来,“所有核心以 1800 MHz 运行”的可用功率被重新分配给实际活动的核心,从而使其中三个核心以 3000 MHz 左右运行,一个核心甚至以 4000 MHz 运行。

我不想要那种权力转移!主要原因是,我倾向于打开相当多的浏览器选项卡,而且(太多)现代网站都有一些后台任务,让 Firefox 忙个不停,因此总有一两个核心处于满载状态。但我不想让它们跳到涡轮频率,不必要地消耗我的电池。所以我希望所有核心都保持在选定的频率以下。

以下是来自cpupower frequency-info

analyzing CPU 0:
  driver: amd-pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 131 us
  hardware limits: 400 MHz - 4.68 GHz
  available cpufreq governors: conservative ondemand userspace powersave performance schedutil
  current policy: frequency should be within 400 MHz and 1.80 GHz.
                  The governor "conservative" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.09 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 0
    Total States: 3
    Pstate-P0:  3300MHz
    Pstate-P1:  1300MHz
    Pstate-P2:  1200MHz

可以清楚地看到,策略在 400 MHz 和 1.80 GHz 之间,但实际频率为 3.09 GHz,Pstate-P0 甚至是 3.3 GHz。

在另一个答案中,建议使用cpupower frequency-set --max 1800000,但这也没有任何效果。

答案1

这可能与内核错误有关,睡眠后,驱动程序不再遵守最大频率:

https://bugzilla.kernel.org/show_bug.cgi?id=215938

然而,重启系统并没有改变这种情况:

cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 3268.709
cpu MHz         : 400.000
cpu MHz         : 2614.703
cpu MHz         : 400.000
cpu MHz         : 2789.985
cpu MHz         : 2847.641
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000

好吧,重启后等待了几分钟,情况确实正确了:

cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 1480.040
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 1479.909
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 400.000
cpu MHz         : 1773.580
cpu MHz         : 400.000

因此,这很可能与上述内核错误有关,当缩放错误错误被移植到 22.04 LTS 内核中时,这个问题就会消失。是的,我希望它被移植回来,因为运行频率过高会耗尽电池,最终会导致拒绝服务!

相关内容