我花了几个小时在互联网上寻找答案。我能找到的一切都没有帮助。我有 Intel i9-9980HK,在 Ubuntu 20.04、内核 5.4.0-33 下运行。
问题是,在满负载情况下,CPU 将频率降低到 2.7 GHZ,我猜是为了保持低功耗预算。无论我尝试什么,我都无法让它运行得更快。它保持在 65 摄氏度以下,静静地、缓慢地处理着数字。为了进行比较,Windows 下的同一台机器在满负载下运行频率为 3 到 4+ GHz。
我尝试过的:
- 将州长改为
performance
.没有效果。 - 设置。
/sys/devices/system/cpu/cpufreq/policyX/energy_performance_preference
performance
没有效果。 sudo service thermald stop
。没有效果。- 增加
/sys/devices/system/cpu/intel_pstate/turbo_pct
。即使是 root 也拒绝访问。 - 增加
/sys/devices/system/cpu/cpufreq/policyX/scaling_min_freq
。没有效果。
我搞不清楚了。它想要什么?顺便说一句,/sys/devices/system/cpu/intel_pstate/status
是active
。
更新。我想我知道原因。当intel_pstate
处于活动状态时,它会忽略所有设置(例如governor
、 下的所有设置/sys/devices/system/cpu/cpufreq
)。像这样的工具cpupower
无法控制intel_pstate
。所以问题几乎可以归结为如何控制intel_pstate
驱动程序。
答案1
解决方案是传递intel_pstate=passive
给内核。然后intel_pstate
将控制权交还给CPUFreq
。后者仍然用于intel_pstate
控制CPU,但intel_pstate
对做什么没有发言权。之后,您终于可以设置性能策略。您的笔记本电脑可以完全安静,也可以使其非常吵闹,但功能强大。当intel_pstate
处于活动状态时,机器既不安静也不表现良好,而是总是缓慢且嘈杂。
两年后更新
事实证明,这个故事还有更多内容。有问题的电脑是一台技嘉笔记本电脑。当我买了一台同样来自技嘉的新笔记本电脑时,一个技巧并intel_pstate=passive
没有帮助。我开始深入研究,发现 (i) 如果笔记本电脑在除 Windows 之外的任何操作系统上运行,技嘉的固件都会限制性能。 ACPI 通过 _OSI 了解它正在运行的操作系统。不仅如此,您会看到,笔记本电脑制造商通常会贡献 Linux 内核并编写特定于供应商的小型驱动程序,以帮助监控系统和管理性能。如果你查看内核源代码,你会发现其中有很多drivers/platform/x86
,对于戴尔,惠普,华硕,联想,富士通......嗯,(ii)技嘉在这方面没有做任何事情。第一个问题可以通过传递acpi_os_name="Windows 2015"
给内核来解决。性能会变得更好。然而,要真正使 Gigabyte 笔记本电脑可以在 Linux 上使用,必须有人为其编写内核驱动程序。有一个用户空间解决方法,用于这个项目,它利用内核的调试功能并将值直接写入嵌入式控制器寄存器。这是危险的,需要有关 EC 的未记录的信息。相反,我们应该做的是从固件调用 WMI 的 ACPI 方法。
答案2
正如评论中提到的问题有很多关于如何更改 CPU 设置的信息。
为什么它被称为“ondemand”,但它设置其他调控器(例如,使用 intel_pstate 驱动程序,它将设置 powersave 调控器)?因为该工具早于 intel_pstate 驱动程序,可以追溯到迄今为止占主导地位的频率缩放驱动程序是 acpi-cpufreq 驱动程序,并且“ondemand”是首选的 Ubuntu 默认调节器的时代。
英特尔P状态:是 Linux 内核中 CPU 性能扩展子系统 (CPUFreq) 的一部分。它是 Sandy Bridge 和后续几代 Intel 处理器的扩展驱动程序。但请注意,其中一些处理器可能不受支持。要了解 intel_pstate,有必要了解 CPUFreq 一般是如何工作的,因此,如果您还没有读过《CPU 性能扩展》,那么现在是阅读该书的时候了。
您可以intel_pstate=disable
在内核书籍参数中添加以禁用它,更多详细信息这里。