Linux 中的 CPU 温度:节流还是读取错误?

Linux 中的 CPU 温度:节流还是读取错误?

使用配备 i7-7700HQ(基本时钟 2.8Ghz)和 GTX 1050 的 Lenovo Legion Y520。

我在 Linux 中收到 CPU 过热警告,它影响了我在游戏中的性能(在 Payday 2 和 CS:GO 中发现)。我在 Windows 中从未遇到过问题。

这是我在尝试解决此问题时发现的:

在 Windows 10 中(使用 aida64)

  • Windows 空闲时保持在 3.4 Ghz 左右(因为我的电源设置设置为“高性能”而不是默认的“平衡”),温度约为 50C。

  • 当对 CPU 施加压力时,温度会缓慢(几秒钟而不是立即)从约 50C 升至 75C 左右,并舒适地保持在该水平。压力时时钟速度约为 2.9Ghz。利用率始终为 100%。 Aida64 不报告限制。当受到压力时,CPU 核心上的电压会从 1.1 左右变化到 0.9 左右。

在 Arch Linux 中(使用 s-tui)

  • Linux 空闲时保持在 2.0Ghz 左右,温度在 50C 左右。

  • 这就是奇怪的地方:当对 CPU 施加压力时,温度立即从 50C 升至约 93C。压力时时钟速度恰好为 3.4Ghz。利用率始终为 100%。当关闭压力测试时,温度立即回到 50C 左右,就像什么都没发生过一样。执行此操作时,笔记本电脑当然不会感觉温度高达 90C+,即使经过长时间的压力也是如此。

下图显示了温度、功率和频率如何同时下降。注意 CPU 温度在这么短的时间内变化了多少。 Linux中的节流示意图

如何解决这个节流问题?我是否在 Linux 中降低了 CPU 的电压?为什么在 Linux 中读取温度错误,而在 Windows 中却读取温度错误?

我使用 cpupower 将配置文件从节能更改为性能。我在 s-tui 中仍然看到同样的限制。当设置为性能时,空闲 CPU 频率会出现跳跃(而不是从 2000-2500Mhz 左右变为始终为 3400Mhz),但这是唯一发生变化的事情。

风扇控制

我尝试使用控制风扇风扇控制(lm_sensors),但 pwmconfig 表示未安装支持 pwm 的传感器模块。

我尝试过NBFC,但无论我选择什么配置文件,它似乎都没有做任何事情。我什至不知道 NBFC 是否可以控制我的粉丝,但它在选择个人资料时不会报告任何错误。

我也尝试过思凡,但似乎对节流没有帮助。它还认为我的风扇速度为 8RPM,请参阅这个线程

解决方案

我发现使用 cpupower 将最大允许 CPU 频率降低到 3100MHz(而不是默认的 3800)可以解决所有问题。

sudo cpupower frequency-set -u 3100MHz

我还将 max_freq 更改/etc/default/cpupower为相同的值,以使其永久化。我发现这确实会导致游戏中的 fps 略有下降,但并不严重。至少我的fps是稳定的:)

遗憾的是,我认为这可能会导致非游戏任务(例如编译某些内容时)的性能下降。

1.5年后

我刚刚再次测试了 Windows 的稳定性(使用 AIDA64),发现它现在也有热节流阀。正如您在下图中看到的那样,温度迅速跃升至 90 度,AIDA64 报告出现了节流。时钟速度空闲时为 3.4GHz,开始测试几秒钟后下降到 800MHz 左右,一秒后再次跳升至 3.4GHz。它不会决定在压力测试时降低时钟速度到 2.9GHZ(像以前一样)。

Windows 上的 AIDA64,电源设置 = 高性能

为什么 Windows 中的最大频率突然停止降低了?

答案1

差异是由于 Windows 和 Linux 使用不同的 CPU 限制配置文件。

在 Linux 上你确实可以对此进行一些控制。例如,以下命令将显示当前正在使用哪个配置文件:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

有多种方法可以选择要使用的配置文件。 Arch Linux wiki 有这方面的详细信息,可能值得一读:

CPU 频率缩放 - Arch Wiki

还有一个风扇控制的问题 - 您需要确保有适当的驱动程序来控制风扇,并且在游戏时将它们设置为足够高的速度。

笔记本电脑上的 Linux可以是有用的资源。

答案2

我相信造成差异的原因是您的 Windows 安装有英特尔动态平台和散热框架调整频率以管理温度的驱动器。你的Linux安装没有这个,所以你的CPU只会以最大频率运行,无论温度如何,所以它会跳到最大值100C,直到CPU的固件最小化所有频率,直到温度下降,然后它返回到最大频率,这重复。

不幸的是,Intel DPTF 驱动程序不适用于 Linux AFAIK,因此除非您可以设置一些软件来执行相同的操作(也许是 Thermald?),我想您只能简单地限制最大频率。

我不明白温度如何瞬间变化(在我朋友的 Y520 上,它在不到一秒的时间内在 60C 和 100C 之间变化,缺少 Intel DPTF 驱动程序;我从未见过任何 CPU 温度变化如此之快)。我认为这是由 CPU 和散热器之间的热接触不良引起的,但也许芯片是这样设计的,并且应该由 Intel DPTF 驱动程序管理才能正常工作。

相关内容