Странное мерцание / разрывание экрана при использовании 75 Гц на AMD GPU

Я надеюсь, что это не имеет большого значения, что я публикую свой вопрос здесь, даже если я использую Pop!_OS. Проблема также возникает на живом USB Manjaro.

Я использую

  • Процессор Ryzen 1500x,
  • 16 ГБ ОЗУ,
  • Материнская плата MSI B350m Gaming Pro с версией RX 580 8GB,
  • Монитор AOC G2260VWQ6 1920x1080x75 Гц.

После загрузки и входа в систему все в порядке, однако, после выключения и последующего включения экрана, возврата из экранной заставки, изменения настроек дисплея, которые заставляют экран "перезагружаться" или что-либо подобное, при частоте обновления более 60 Гц, что ~75 Гц для моего экрана, странное мерцание начинает происходить.

Вот ссылки с видео для разных ситуаций:

  • Все хорошо после входа в систему: https://streamable.com/am3kp

  • Экран начинает мигать после блокировки (выключает экран через секунду), а затем снова входит в систему: https://streamable.com/meeiz

  • Устранение мерцания путем изменения разрешения и возврата: https://streamable.com/5l5z2

Иногда все равно работает нормально, но это происходило только один раз, перезагрузка экрана несколько раз не начинала мерцать, пока не перезагрузилась.

Я протестировал его, используя DisplayPort и HDMI, с более высокой частотой обновления при более низких разрешениях проблема все еще возникает. При переключении на другое разрешение и использовании ~75 Гц мерцание не исчезает.

Это происходит как в Mesa версии 18, так и в 19, в Manjaro это все еще происходило даже при переходе на версию ядра 5. Конечно, проблема не возникает в Windows.

Я не настолько продвинут в Linux, поэтому я действительно не знаю, как это исправить. Пожалуйста помоги.

РЕДАКТИРОВАТЬ: После поиска немного больше, я нашел обходной путь. Мне пришлось изменить "авто" на "высокий" в файле /sys/class/drm/card0/device/power_dpm_force_performance_level. Ссылка на тему, на которой я нашел решение: https://bbs.archlinux.org/viewtopic.php?id=244398

0 ответов

Хорошее объяснение в Arch wiki: https://wiki.archlinux.org/index.php/AMDGPU#Screen_artifacts_and_frequency_problem

Чтобы исправить это навсегда (это будет работать даже после перезагрузки):

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/system/amdfix_service.service

2) Запускаем в терминале:

       sudo chmod 644 /etc/systemd/system/amdfix_service.service

3) Запустите терминал (измените "низкий" на "высокий", если хотите. Лично я выбираю "низкий": графический процессор менее шумный, и я не вижу снижения производительности.):

       echo '#!/bin/bash
echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level' | sudo tee /usr/bin/amdfix_script.sh

4) Запускаем в терминале:

       sudo chmod +x /usr/bin/amdfix_script.sh

5) Запускаем в терминале:

       sudo systemctl enable amdfix_service.service

6) Запускаем в терминале:

       sudo systemctl start amdfix_service.service

Чтобы проверить, работает ли он в терминале:

       sudo systemctl status amdfix_service.service

в выводе должен быть текст "amdfix_service.service: Succeeded".

Все сделано.


Чтобы изменить уровень производительности после того, как вы выполнили все шаги, снова запустите команду внутри шага "3)" с желаемым уровнем производительности "низкий" или "высокий", а затем запустите

       sudo systemctl restart amdfix_service.service

Чтобы быстро временно (вам нужно запускать команду при каждой загрузке) исправить проблему, запустите в терминале:

       echo 'low' | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level

ИЛИ

       echo 'high' | sudo tee  sys/class/drm/card0/device/power_dpm_force_performance_level

Я совершенно новичок в Linux, но у меня такая же проблема... Я использую Ubuntu 20.04, а мой графический процессор - ADM Radeon rx 5700 xt.

Скрипт работает, если я запускаю его с

sudo systemctl start amdfix_service.service

Но после перезагрузки не работает. Мне всегда нужно запускать команду после загрузки. Если я проверю статус с помощью

sudo systemctl status amdfix_service.service

перед запуском скрипта я получаю следующий вывод:

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'.

Похоже, у amdfix_script.sh нет разрешения на запись

sys/class/drm/card0/device/power_dpm_force_performance_level  

Вы знаете, как это исправить?

Другие вопросы по тегам