我想知道 Linux 如何处理游戏玩家计算机,所以我构建了一台,但我们知道 GeForce 不像 AMD 那样喜欢 Linux,这就是我选择最后一个的原因。
我组装了一台AMD Ryzen 7 1800X CPU和Radeon RX 560D GPU的电脑,因为Vega太贵了,我买不起,而且基准测试说560是目前最好的性价比。
经过一番研究,我发现后缀 D 意味着它的时钟速度略低,以便与不带 D 的 RX560 相比节省一些功耗。
在随机游戏过程中无数次崩溃后,我终于发现问题是 GPU 过热,它的风扇速度往往跟随 CPU 风扇速度,但当然在某些游戏中对 CPU 的需求比 GPU 少得多。
我通过根据GPU温度而不是CPU自定义风扇速度部分解决了这个问题,现在它正在逐渐增长,并在50摄氏度时达到最大速度,但问题是:在某些游戏上它始终保持最大速度,最终仍然崩溃。
崩溃描述:屏幕闪烁然后黑屏,GPU风扇停止,键盘LED闪烁然后关闭,鼠标不变,其他CPU风扇保持,有时系统永远冻结,有时系统自动重启。
由于需要重新启动,我在系统日志上找不到任何提示,最初我认为这是内核恐慌,但即使使用转储文件并复制内核,系统仍然崩溃,我无法恢复它。
我不知道 Windows 是否会有同样的问题,但我坚信不会,我从未见过有人在 Windows 上遇到同样的问题,所以我的问题是:有没有办法告诉内核在 GPU 即将过热时让它放松一点,也许只是自动降低 GPU 时钟速度?
答案1
/sys/class/drm/card0/device
我找到了解决方案,文件上有一些文件pp_dpm_mclk
指示GPU内存时钟,文件pp_dpm_sclk
指示GPU核心时钟,我的:
$ egrep -H . /sys/class/drm/card0/device/pp_dpm_*
/sys/class/drm/card0/device/pp_dpm_mclk:0: 300Mhz
/sys/class/drm/card0/device/pp_dpm_mclk:1: 1500Mhz *
/sys/class/drm/card0/device/pp_dpm_pcie:0: 2.5GB, x8 *
/sys/class/drm/card0/device/pp_dpm_pcie:1: 8.0GB, x16
/sys/class/drm/card0/device/pp_dpm_sclk:0: 214Mhz *
/sys/class/drm/card0/device/pp_dpm_sclk:1: 481Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:2: 760Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:3: 1000Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:4: 1050Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:5: 1100Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:6: 1150Mhz
/sys/class/drm/card0/device/pp_dpm_sclk:7: 1196Mhz
该文件power_dpm_force_performance_level
指示配置文件,可以是low
,auto
或manual
,默认是auto
,当low
它始终在最低时钟上运行时,这并不完全是我想要的,所以我将其设置为manual
并制作了一个脚本,根据 GPU 不断更改时钟温度,瞧,成功了!
要更改配置文件上的时钟,manual
只需将一个数字写入pp_dpm_sclk
代表该行的文件,从 开始0
,在我的例子中直到7
。
如果你对我的剧本感兴趣就这个。