是否可以在现代 PSTATE 驱动程序下设置*恒定*最低 CPU 频率?

是否可以在现代 PSTATE 驱动程序下设置*恒定*最低 CPU 频率?

新的pstate英特尔驱动程序让我永远生气,因为他们删除了旧的powersave调速器,该调速器允许我设置最低的可用 CPU 频率,并在一台安静、寒冷的笔记本电脑上运行我的数值模拟数小时或数天。更糟糕的是,他们现在所说的powersave本质上是旧的调速器ondemand,即 CPU 频率随负载而上升的模式,以及随之而来的该死的风扇噪音:

由于这些策略是在驱动程序中实现的,因此它们与 cpufreq 缩放调控器的实现不同,即使它们在 cpufreq sysfs (scaling_governors) 中具有相同的名称。例如,“性能”策略类似于 cpufreq(TM)“性能”调控器,但“powersave”与 cpufreq“powersave”调控器完全不同。这里的策略类似于cpufreq“ondemand”,其中请求的P-State与系统负载相关。

(摘自https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt

现在,请问还有其他方法可以将 CPU 频率保持在最低吗?这对我来说真的很重要。如果我最终无法设置恒定的最低 CPU 频率,我宁愿将笔记本电脑从窗户扔出去。这就是我使用笔记本电脑的方式,这就是我想要一台笔记本电脑的目的,几天来我一直在努力实现这一目标!

我正在尝试这个,但它不起作用:

echo 42 | sudo dd of=/sys/devices/system/cpu/intel_pstate/max_pref_pct

将最大速度设置为42%,并且没有任何影响,每当我做某事时CPU都会保持到100%。我究竟做错了什么? (我应该重新启动某些服务或其他什么吗?)

有什么办法可以得到这个吗?另外,非 Intel CPU 允许我这样做吗?我不介意购买另一台笔记本电脑来解决问题。

答案1

好吧,事实证明,新的pstate英特尔驱动程序很棒,但首先需要练习一点古老的、失落的艺术阅读文档。

我将保留我的问题,因为从我在互联网上看到的所有悲伤和沮丧来看,我不是第一个遇到这个问题的人。

新的 CPU 驱动程序有很多选项,但我将把我的解释限制在一些简单的内容上,对我来说,已经足够和令人满意了。首先:

sudo apt-get install linux-cpupower

(或非基于 Debian 的发行版中的等效项)

现在有 2 个具有名称的行为(调控器)powersaveperformance但这是一个非常不幸的命名方案,因为这些调控器与旧驱动程序中具有相同名称的行为无关:

  • powersave意思是现在取决于负载的可变频率,即这本质上是旧ondemand州长。你可以设置最小和最大频率,如果最大频率设置为你的CPU能够达到的最大频率(我相信这是默认值),那么你就不会省钱了。您甚至可以将最小频率提高到第二高值,结果将是 CPU 几乎全速运转 24/7 并且调速器仍将被命名节能。他们应该将此调控器命名为 VARIABLE 或类似的名称,以避免用户之间的大量混淆,并避免开发人员大量错误报告内核错误。

  • performance意思是这里无论负载如何,频率恒定,这取决于用户设置的最大值。设置此调节器后,最低频率将被忽略,CPU 将以您设置的最高频率运行。如果因此您设置了非常低的频率,那么您将不会看到任何特殊性能或任何东西,您只会在恒定频率下获得减慢的CPU。因此,他们最好将这个州长命名为 CONSTANT 或类似的名称,以免让像我这样习惯了旧方案的许多人感到沮丧。

因此,这里有一些非常有用的示例,至少在内核 4.14 中是这样。我将使用 CPU 的最小和最大频率值:0.4 和 3.1 GHz。查看您的cpupower frequency-info

所有内核均保持恒定的最低频率

这就是我想要的!我们通过设置恒定频率调节器并将最低可用频率设置为最大值来得到:

sudo cpupower frequency-set -g performance
sudo cpupower frequency-set -u 400MHz

所有内核均保持恒定的最高频率

(你会发现,对于台式电脑来说,这个问题经常被问到,这很有意义,尽管也有人愿意毁掉他们的笔记本电脑风扇)

sudo cpupower frequency-set -g performance
sudo cpupower frequency-set -u 3100MHz

所有内核的最小和最大可能频率之间的可变频率

(这被称为一经请求和老acpi-cpufreq司机一起)

sudo cpupower frequency-set -g powersave
sudo cpupower frequency-set -d 400MHz
sudo cpupower frequency-set -u 3100MHz

所有内核的最低频率和中等频率之间的可变频率

(也许是因为您想在需要时获得更高的速度,但又不想达到最大速度并听到风扇疯狂地吹)

sudo cpupower frequency-set -g powersave
sudo cpupower frequency-set -d 400MHz
sudo cpupower frequency-set -u 1200MHz

等等。这非常简单并且效果非常好。您也可以在运行大量数字内容的一个核心中设置恒定的低频,而在另一核心中保留可变频率,在其中启动更常见的内容(电子邮件、网页浏览...)。请参阅taskset获取更多信息。

答案2

它对我有用:

echo "50" | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct

当 CPU 负载为 100% 时,它仅运行 50% 的性能/速度

答案3

在浪费了很多天寻找设置恒定频率(进行科学实验)的解决方案后,我最终放弃了。我尝试了许多不同的解决方案,包括performance州长(正如墨菲斯托所建议的)、更改intel_pstate 驱动程序的active模式passive、禁用 PPC 保护、从 intel_pstate 切换到 acpi-cpufreq 等。

这些选项对于设置恒定频率都没有任何影响。然后我在内核文档:

对于当代英特尔处理器,频率由处理器本身控制,软件暴露的 P 状态与性能水平相关。对于英特尔酷睿处理器来说,频率可以设置为单一频率的想法是虚构的。即使缩放驱动程序选择单个 P 状态,处理器运行的实际频率也是由处理器本身选择的。

所以,没有可靠的方法可以做到这一点,P状态只是建议,硬件将继续自行决定。在我的处理器(Intel J4105)上,硬件似乎完全忽略了来自软件的设置。

相关内容