使用带有 i7-7700HQ(基本时钟 2.8Ghz)和 GTX 1050 的 Lenovo Legion Y520。
我在 linux 中收到 CPU 过热警告,这影响了我在游戏中的表现(见于 Payday 2 和 CS:GO)。我在 Windows 中从来没有遇到过问题。
这是我在尝试解决此问题时发现的:
在 Windows 10 中(使用 aida64)
Windows 在空闲时保持在 3.4 Ghz 左右(因为我的电源设置设置为“高性能”而不是默认的“平衡”),温度约为 50 摄氏度。
当对 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 中降低了我的 CPU 电压?为什么它在 Linux 中读取温度错误,但在 Windows 中却没有?
我使用 cpupower 将配置文件从 powersave 更改为 performance。我仍然在 s-tui 中看到同样的限制。设置为性能时,空闲 cpu 频率会上升(而不是大约 2000-2500Mhz 到始终保持在 3400Mhz),但这是唯一改变的事情。
风扇控制
我尝试使用fancontrol (lm_sensors)控制风扇,但 pwmconfig 说没有安装支持 pwm 的传感器模块。
我用NBFC尝试过,但无论我选择什么配置文件,它似乎都没有做任何事情。我什至不知道NBFC是否可以控制我的粉丝,但是在选择配置文件时它不会报告任何错误。
我也试过thinkfan,但它似乎对节流没有帮助。它还认为我的风扇速度为 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 中的最大频率?
差异是由于 windows 和 linux 使用不同的 CPU 节流配置文件。
您确实可以在 linux 上对此进行一些控制。例如,以下命令将显示当前正在使用的配置文件:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
有多种方法可以选择要使用的配置文件。Arch Linux wiki 对此有很好的信息,可能值得一读:
CPU 频率缩放 - Arch Wiki
还有一个风扇控制问题——你需要确保你有合适的驱动程序来控制你的风扇,并且在游戏时将它们设置为足够高的速度。
笔记本电脑上的 Linux可能是一个有用的资源。
我相信差异的原因是因为您的 Windows 安装具有英特尔动态平台和热框架驱动程序,它可以调整频率以管理温度。您的 Linux 安装没有此功能,因此无论温度如何,您的 CPU 都只会以最高频率运行,因此它会跳到最高 100C,直到 CPU 的固件将所有频率降至最低,直到温度下降,然后它返回到最高频率,这重复。
不幸的是,英特尔 DPTF 驱动程序不适用于 linux AFAIK,所以除非你可以设置一些软件来做它的等价物(也许是热?),我想你只能简单地限制最大频率。
不过,我不明白温度是如何瞬间变化的(我朋友的 Y520 缺少英特尔 DPTF 驱动程序,它会在几分之一秒内在 60C 和 100C 之间变化;我从未见过任何 CPU 温度变化如此之快)。我认为这是由于 CPU 和散热器之间的热接触不良造成的,但也许芯片是这样设计的,它应该由 Intel DPTF 驱动程序管理才能正常工作。