在 AMD GPU 上使用 75hz 时出现奇怪的屏幕闪烁/撕裂

Age*_*gen 5 screen mesa display-resolution amd-graphics amd-ryzen

我希望即使我使用的是 Pop!_OS,我在这里发布我的问题也没有太大区别。在 Manjaro live usb 上也会出现这个问题。

我正在使用

  • 锐龙 1500x CPU,
  • 16GB 内存,
  • 带有 RX 580 8GB 版本的 MSI B350m Gaming Pro 主板,
  • 显示器是 AOC G2260VWQ6 1920x1080x75hz。

启动并登录后一切正常,但是,在关闭屏幕然后再打开后,从屏幕保护程序返回,更改显示设置使屏幕“重新启动”或任何类似的设置,同时刷新率超过 60hz,这是我的屏幕约为 75hz,奇怪的闪烁开始发生。

以下是针对不同情况的视频链接:

有时它仍然可以正常工作,但它只发生过一次,多次重新启动屏幕并没有开始闪烁,直到重新启动。

我同时使用 DisplayPort 和 HDMI 对其进行了测试,在较低分辨率下具有较高的刷新率,问题仍然存在。当切换到不同的分辨率并仍然使用 ~75hz 时,闪烁不会消失。

它发生在 Mesa 18 和 19 版本上,在 Manjaro 上,即使切换到内核版本 5,它仍然会发生。当然,这个问题在 Windows 中不会发生。

我在 Linux 中不是那么先进,所以我真的不知道如何解决它。请帮忙。

编辑:搜索更多后,我找到了一个解决方法。我不得不将文件 /sys/class/drm/card0/device/power_dpm_force_performance_level 中的“auto”更改为“high”。链接到我找到解决方法的线程:https : //bbs.archlinux.org/viewtopic.php?id=244398

小智 2

arch wiki 上有一个很好的解释:https ://wiki.archlinux.org/index.php/AMDGPU#Screen_artifacts_and_Frequency_problem


暂时快速(您必须在每次启动时运行命令)修复问题,请在终端中运行:

echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
Run Code Online (Sandbox Code Playgroud)

或者

echo 'high' | sudo tee  sys/class/drm/card0/device/power_dpm_force_performance_level
Run Code Online (Sandbox Code Playgroud)

要永久修复它(即使重新启动后也将起作用):

  1. 在终端中运行:
echo '[Unit]
Description=Fix amd flickering on high Hz monitors.
    
[Service]
ExecStart=/usr/bin/amdfix_script.sh
    
[Install]
WantedBy=multi-user.target' | sudo tee /etc/systemd/syste/amdfix_service.service
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中运行:
sudo chmod 644 /etc/systemd/system/amdfix_service.service
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中运行(根据需要更改'low'为。我个人选择:GPU 噪音较小,并且我没有看到任何性能下降。):'high''low'
echo "#!/bin/bash
echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level" | sudo tee /usr/bin/amdfix_script.sh
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中运行:
sudo chmod +x /usr/bin/amdfix_script.sh
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中运行:
sudo systemctl enable amdfix_service.service
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中运行:
sudo systemctl start amdfix_service.service
Run Code Online (Sandbox Code Playgroud)

要检查其是否在终端中运行:

sudo systemctl status amdfix_service.service
Run Code Online (Sandbox Code Playgroud)

输出应包含文本“amdfix_service.service:成功”。

全做完了。


要在完成所有步骤更改性能级别,请使用所需的性能级别再次运行“3)”步骤中的命令'low',或者'high' 然后运行

sudo systemctl restart amdfix_service.service
Run Code Online (Sandbox Code Playgroud)


小智 0

我对 Linux 完全陌生,但我有同样的问题...我使用的是 Ubuntu 20.04,我的 GPU 是 ADM Radeon rx 5700 xt。

如果我用以下脚本启动它,该脚本就会起作用

sudo systemctl start amdfix_service.service
Run Code Online (Sandbox Code Playgroud)

但重启后就不行了。我总是必须在启动后运行该命令。如果我检查状态

sudo systemctl status amdfix_service.service
Run Code Online (Sandbox Code Playgroud)

在运行脚本之前,我得到以下输出:

mdfix_service.service - Fix amd flickering on high Hz monitors.
 Loaded: loaded (/etc/systemd/system/amdfix_service.service; enabled; vendor preset: enabled)
 Active: failed (Result: exit-code) since Sun 2020-05-17 12:32:19 CEST; 1min 45s ago
Process: 779 ExecStart=/usr/bin/amdfix_script.sh (code=exited, status=1/FAILURE)
Main PID: 779 (code=exited, status=1/FAILURE)
Mai 17 12:32:19 leonPC sudo[792]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/tee /sys/class/drm/card0/device/power_dpm_force_performance_level
Mai 17 12:32:19 leonPC sudo[792]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mai 17 12:32:19 leonPC amdfix_script.sh[808]: tee: /sys/class/drm/card0/device/power_dpm_force_performance_level: Permission denied
Mai 17 12:32:19 leonPC amdfix_script.sh[808]: low
Mai 17 12:32:19 leonPC sudo[792]: pam_unix(sudo:session): session closed for user root
Mai 17 12:32:19 leonPC systemd[1]: amdfix_service.service: Main process exited, code=exited, status=1/FAILURE
Mai 17 12:32:19 leonPC systemd[1]: amdfix_service.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)

所以看起来,amdfix_script.sh没有权限写入

sys/class/drm/card0/device/power_dpm_force_performance_level  
Run Code Online (Sandbox Code Playgroud)

你知道如何解决这个问题吗?