AMDGPU (Русский)
AMDGPU — это свободный драйвер для графики AMD Radeon, начиная с поколения Graphics Core Next.
Выбор правильного драйвера
Выберите правильный драйвер, соответствующий вашей видеокарте — смотрите раздел Xorg (Русский)#AMD. Драйвер AMDGPU поддерживает Southern Islands (GCN 1, 2012 год) и более новые семейства. Добавление поддержки старых GPU до поколения GCN не планируется.
Для неподдерживаемых видеокарт можно использовать открытый драйвер ATI.
Установка
Установите пакет mesa, который предоставляет драйвер DRI для 3D-ускорения, а также драйверы VA-API/VDPAU для аппаратного декодирования видео.
- Для поддержки 32-битных приложений также установите пакет lib32-mesa из репозитория multilib.
- Для драйвера DDX (который обеспечивает 2D-ускорение в Xorg) можно установить пакет xf86-video-amdgpu, но это необязательно, так как стандартный драйвер modesetting обычно тоже работает без проблем.
- Для поддержки Vulkan:
- сперва попробуйте только пакет vulkan-radeon: хотя pacman не предлагает его в качестве первого пакета, предоставляющего vulkan-driver (из-за сортировки по алфавиту), он позволяет избежать некоторых проблем, о которых сообщали пользователи драйвера amdvlk;
- если установлен пакет amdvlk, он назначает себя драйвером Vulkan по умолчанию; если вам необходимо использовать оба драйвера (например, если есть проблемы с драйвером vulkan-radeon), переключайте используемый драйвер как описано в разделе Vulkan (Русский)#Выбор с помощью переменной окружения;
- для поддержки 32-битных приложений также установите lib32-vulkan-radeon и/или lib32-amdvlk соответственно.
Экспериментальные версии
Иногда имеет смысл попробовать экспериментальную сборку Mesa.
Установите пакет mesa-gitAUR, который предоставляет драйвер DRI для 3D-ускорения.
- Для поддержки 32-битных приложений также установите пакет lib32-mesa-gitAUR из AUR или из неофициального репозитория mesa-git.
- Для драйвера DDX (который обеспечивает 2D-ускорение в Xorg) установите пакет xf86-video-amdgpu-gitAUR.
- Для поддержки Vulkan при использовании неофициального репозитория mesa-git установите пакет vulkan-radeon-git, а также lib32-vulkan-radeon-git для поддержки 32-битных приложений. При установке mesa-gitAUR из AUR это не требуется.
Включение поддержки Southern Islands (SI) и Sea Islands (CIK)
В официально поддерживаемых ядрах включена поддержка AMDGPU для карт Southern Islands (GCN 1, 2012 год) и Sea Islands (GCN 2, 2013 год). Драйвер ядра amdgpu
должен быть загружен раньше драйвера radeon. Вы можете проверить, какой драйвер ядра загружен, командой lspci -k
:
$ lspci -k -d ::03xx
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM] Subsystem: Gigabyte Technology Co., Ltd Device 226c Kernel driver in use: amdgpu Kernel modules: radeon, amdgpu
Если драйвер amdgpu
не используется (не указан в строке Kernel driver in use
), выполните описанные ниже шаги.
Загрузка драйвера amdgpu
Параметры модулей ядра amdgpu
и radeon
— cik_support=
и si_support=
.
Их нужно прописать в параметрах ядра или в файле настроек modprobe, а конкретные значения зависят от версии GCN.
Можно использовать оба параметра, если вы не знаете версию GCN своей видеокарты.
[..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override
.Установка параметров модуля ядра в командной строке ядра
Пропишите один из следующих наборов параметров ядра:
- Southern Islands (SI):
radeon.si_support=0 amdgpu.si_support=1
- Sea Islands (CIK):
radeon.cik_support=0 amdgpu.cik_support=1
Кроме того, если вы используете APU AMD A10 с интегрированной графикой Sea Island (GCN 1.1), вам может понадобиться отключить Radeon Dynamic Power Management для обеспечения нормальной загрузки. Эта функция управляет частотой графического ядра, что позволяет контролировать температуру и шум, однако она может привести к бесконечному циклу перезагрузки. Чтобы отключить её, добавьте radeon.dpm=0
в дополнение к указанным выше параметрам ядра.
Установка правильного порядка загрузки модулей
Убедитесь, что amdgpu
является первым модулем в массиве mkinitcpio (Русский)#MODULES, например: MODULES=(amdgpu radeon)
.
Установка параметров модуля ядра
Для Southern Islands (SI) используйте параметр модуля ядра si_support=1
, а для Sea Islands (CIK) — cik_support=1
:
/etc/modprobe.d/amdgpu.conf
options amdgpu si_support=1 options amdgpu cik_support=1
/etc/modprobe.d/radeon.conf
options radeon si_support=0 options radeon cik_support=0
Убедитесь, что в /etc/mkinitcpio.conf
в массиве HOOKS
есть modconf
, и пересоберите образ initramfs.
Компиляция ядра с поддержкой драйвера amdgpu
При компиляции собственного ядра укажите параметры CONFIG_DRM_AMDGPU_SI=Y
и/или CONFIG_DRM_AMDGPU_CIK=Y
.
Компилятор ACO
ACO — открытый компилятор шейдеров, разработанный компанией компанией Valve. По сравнению с LLVM и AMDVLK он компилирует шейдеры быстрее и работает лучше.
Бенчмарки: GitHub, Phoronix (1) (2) (3).
Начиная с версии 20.2, mesa использует компилятор ACO по умолчанию.
Загрузка
Модуль ядра amdgpu
должен загрузиться автоматически.
Если он не загружается:
- проверьте #Включение поддержки Southern Islands (SI) и Sea Islands (CIK), если это требуется для вашей видеокарты;
- убедитесь, что пакет linux-firmware-amdgpu установлен и обновлён, так как он содержит необходимые прошивки;
- убедитесь, что вы не используете параметры ядра
nomodeset
илиvga=
, которые отключают KMS, так как он необходим для работыamdgpu
; - убедитесь, что загрузка модуля
amdgpu
не запрещена.
Возможно, модуль загружается, но слишком поздно. В таком случае проверьте, включен ли у вас ранний запуск KMS.
Настройка Xorg
Xorg автоматически загрузит нужный драйвер и выставит правильное разрешение монитора по информации из EDID. Изменение конфигурации Xorg требуется лишь для тонкой настройки драйвера.
Для ручной настройки создайте такой файл:
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass" Identifier "AMD" MatchDriver "amdgpu" Driver "amdgpu" EndSection
Информация о параметрах драйвера, которые можно менять в этой секции, доступна в документации: amdgpu(4).
Избавление от разрывов
Параметр TearFree управляет предотвращением разрывов (тиринга) с помощью аппаратного механизма переключения страниц (page flipping). По умолчанию TearFree будет включен для повёрнутых выходов, выходов с применёнными преобразованиями RandR и для вторичных (slave) выходов RandR 1.4 и выключен для всего остального. Вы также можете настроить его так, чтобы он был всегда включен или всегда выключен, с помощью значений true
или false
соответственно.
Option "TearFree" "true"
Можно включить TearFree временно с помощью xrandr:
$ xrandr --output название-выхода --set TearFree on
Список доступных видеовыходов можно получить командой xrandr -q
.
Уровень DRI
Параметр DRI устанавливает максимальный уровень DRI для использования. Доступные значения — 2 для DRI2 и 3 для DRI3. По умолчанию используется DRI3 в Xorg версий >= 1.18.3 и DRI2 в более старых версиях:
Option "DRI" "3"
Переменная частота обновления
Смотрите статью Variable refresh rate.
10-битный цвет
Новые карты AMD поддерживают 10-битную глубину цвета, но по умолчанию используется 24-битный цвет (глубина 8 бит), а 30-битный цвет должен быть явно включен. Включение этой функции может сделать полосы в градиентах менее видимыми, если приложения поддерживают это. Чтобы проверить, поддерживает ли ваш монитор эту функцию, ищите «EDID» в журнале Xorg (например, /var/log/Xorg.0.log
или ~/.local/share/xorg/Xorg.0.log
):
[ 336.695] (II) AMDGPU(0): EDID for output DisplayPort-0 [ 336.695] (II) AMDGPU(0): EDID for output DisplayPort-1 [ 336.695] (II) AMDGPU(0): Manufacturer: DEL Model: a0ec Serial#: 123456789 [ 336.695] (II) AMDGPU(0): Year: 2018 Week: 23 [ 336.695] (II) AMDGPU(0): EDID Version: 1.4 [ 336.695] (II) AMDGPU(0): Digital Display Input [ 336.695] (II) AMDGPU(0): 10 bits per channel
Чтобы проверить, включен ли он сейчас, ищите «Depth»:
[ 336.618] (**) AMDGPU(0): Depth 30, (--) framebuffer bpp 32 [ 336.618] (II) AMDGPU(0): Pixel depth = 30 bits stored in 4 bytes (32 bpp pixmaps)
При настройках по умолчанию журнал будет сообщать об использовании 24-битного цвета.
Чтобы проверить, работает ли 10-битный цвет, остановите Xorg, если он у вас запущен, и запустите Xorg -retro
, который отобразит чёрно-белую сетку, затем нажмите Ctrl-Alt-F1
и Ctrl-C
, чтобы выйти из X, и запустите Xorg -depth 30 -retro
. Если всё работает нормально, значит, 10-битный цвет работает.
Чтобы включить 10-битный цвет через startx
, используйте startx -- -depth 30
. Для постоянного включения отредактируйте настройки Xorg:
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Screen" Identifier "asdf" DefaultDepth 30 EndSection
Снижение задержки вывода
Для минимизации задержек можно выключить page flipping и tear free:
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass" Identifier "AMD" MatchDriver "amdgpu" Driver "amdgpu" Option "EnablePageFlip" "off" Option "TearFree" "false" EndSection
Смотрите также Gaming#Reducing DRI latency.
Возможности
Аппаратное ускорение видео
Смотрите раздел Аппаратное ускорение видео#AMD/ATI.
Мониторинг
Можно следить за температурой и P-state видеокарты.
Консольные инструменты
- amdgpu_top — Инструмент для отображения использования AMDGPU.
- nvtop — Мониторинг видеокарт AMD, Intel и NVIDIA.
- radeontop — Просмотр загрузки GPU, как для общего процента активности, так и для отдельных блоков.
Графические инструменты
- amdgpu_top — Инструмент для отображения использования AMDGPU.
- AmdGuid — Базовый графический интерфейс управления вентиляторами, полностью написанный на Rust.
- Radeon Profile — Инструмент для чтения и изменения частот видеокарт AMD Radeon, использующий Qt 5.
- TuxClocker — Инструмент для мониторинга и разгона, использующий Qt 5.
Вручную
Проверка P-state:
$ cat /sys/class/drm/card0/device/pp_od_clk_voltage
Мониторинг видеокарты:
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
Процент нагрузки:
$ cat /sys/class/drm/card0/device/gpu_busy_percent
Частота GPU:
$ cat /sys/class/drm/card0/device/pp_dpm_sclk
Температура GPU:
$ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input
Частота VRAM:
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
Использование VRAM:
$ cat /sys/class/drm/card0/device/mem_info_vram_used
Размер VRAM:
$ cat /sys/class/drm/card0/device/mem_info_vram_total
Разгон
В Linux 4.17 появилась возможность изменения частот и напряжений через /sys/class/drm/card0/device/pp_od_clk_voltage
.
Параметр загрузки
В первую очередь необходимо разрешить изменение частот и напряжений путём добавления параметра ядра amdgpu.ppfeaturemask=0xffffffff
.
Некоторые биты ещё не используются и могут быть задействованы в будущем. Включение всего сразу может привести к включению нестабильных функций, вызывающих проблемы вроде мерцания экрана или поломки ждущего режима. Достаточно установить бит PP_OVERDRIVE_MASK, 0x4000 в сочетании со стандартным значением ppfeaturemask. Чтобы вычислить разумное значение параметра для вашей системы, выполните:
$ printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"
Вручную
/sys/class/drm/...
являются символическими ссылками и могут меняться при перезагрузках. Постоянные пути находятся в /sys/devices/
, например /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/
. Для надёжности в приведённых ниже примерах рекомендуется заменить пути на постоянные, соответствующие вашему оборудованию.Подробное описание всех поддерживаемых опций доступно в документации ядра: amdgpu thermal control.
Для включения ручного управления разгоном выберите уровень производительности manual
как описано в разделе #Уровни производительности.
Например, чтобы задать для максимального P-state 7 частоту видеокарты 1209 МГц и напряжение 900 мВ, выполните:
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage
Аналогично для максимального P-state 2 видеопамяти:
# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
Чтобы применить действия, указанные ранее выполненными командами, выполните:
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage
Чтобы проверить, применились ли изменения, запустите мониторинг вместе с какой-нибудь 3D-нагрузкой:
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
Сброс на значения по умолчанию:
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
Также можно запретить драйверу переходить из определённых P-state, например, чтобы обойти проблемы, которые могут возникать на низких P-state, такие как мерцания или подвисания. Чтобы принудительно установить максимальный P-state видеопамяти, но при этом позволить видеочипу работать на пониженных частотах, сначала найдите максимально возможный P-state видеопамяти и переключитесь на него:
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
0: 96Mhz * 1: 456Mhz 2: 675Mhz 3: 1000Mhz
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level # echo "3" > /sys/class/drm/card0/device/pp_dpm_mclk
А для видеокарты разрешите только три последних P-state:
# echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
Чтобы выставить ограничение потребления энергии в 50 Вт, выполните:
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
С помощью вспомогательных программ
Если вы не хотите вписывать параметры разгона вручную, есть поддерживаемые сообществом программы, которые упрощают это.
Консольные
- amdgpu-clocks — Скрипт, который можно использовать для мониторинга и установки пользовательских режимов питания для видеокарт AMD. Он также предлагает службу systemd для автоматического применения настроек при загрузке системы.
- ruby-amdgpu_fan — Интерфейс командной строки для взаимодействия с Linux-драйвером amdgpu, написанный на Ruby.
Графические
- TuxClocker — Инструмент для мониторинга и разгона, использующий Qt 5.
- CoreCtrl — Инструмент для разгона с графическим интерфейсом, похожим на WattMan, с поддержкой профилей для отдельных приложений.
-
LACT — GTK-инструмент для просмотра информации и управления видеокартой AMD. Конфликтует с power-profiles-daemon; отключите
amdgpu_dpm
в параметрах последнего во избежание конфликтов. [1]
- Radeon Profile — Инструмент для чтения и изменения текущих частот видеокарт AMD Radeon, использующий Qt 5.
Применение параметров при загрузке системы
Один из способов — использовать юниты systemd для выполнения нужных вам команд управления разгоном. Подробнее в посте на Reddit.
Другой способ — использовать правила udev для некоторых значений. Например, задать уровень производительности low
для экономии энергии можно так:
/etc/udev/rules.d/30-amdgpu-low-power.rules
ACTION=="add", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="low"
Уровни производительности
AMDGPU предлагает несколько уровней производительности (performance levels). Для выбора уровня используется файл power_dpm_force_performance_level
. Доступны следующие уровни:
- auto: динамический выбор оптимального профиля питания для текущих условий в драйвере.
- low: принудительно минимальные частоты.
- high: принудительно максимальные частоты.
- manual: ручная настройка пользователем (#Профили питания или #Разгон).
- profile_standard, profile_min_sclk, profile_min_mclk, profile_peak: отключаются power и clock gating, а частоты устанавливаются для различных случаев профилирования. Этот режим рекомендуется для профилирования специфических рабочих нагрузок.
Например, включить уровень производительности low
можно такой командой:
# echo "low" > /sys/class/drm/card0/device/power_dpm_force_performance_level
Профили питания
AMDGPU предлагает несколько оптимизаций с помощью профилей питания, одним из наиболее часто используемых является режим вычислений для приложений с интенсивным использованием OpenCL. Список доступных профилей можно посмотреть командой:
$ cat /sys/class/drm/card0/device/pp_power_profile_mode
NUM MODE_NAME SCLK_UP_HYST SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL MCLK_UP_HYST MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL 0 BOOTUP_DEFAULT: - - - - - - 1 3D_FULL_SCREEN: 0 100 30 0 100 10 2 POWER_SAVING: 10 0 30 - - - 3 VIDEO: - - - 10 16 31 4 VR: 0 11 50 0 100 10 5 COMPUTE *: 0 5 30 10 60 25 6 CUSTOM: - - - - - -
card0
указывает на одну конкретную видеокарту; если у вас их несколько, убедитесь, что вы смотрите параметры правильной видеокарты.Чтобы использовать определённый профиль питания, сначала включите уровень производительности manual
:
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
Затем выберите профиль питания, записав связанное с ним поле NUM
. Например, чтобы включить профиль COMPUTE
:
# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
Масштабирование экрана
Чтобы избежать масштабирования картинки монитором на неродных разрешениях, можно использовать масштабирование видеокартой. Для его включения используйте xrandr:
$ xrandr --output название-выхода --set "scaling mode" режим-масштабирования
Доступные режимы масштабирования: None
, Full
, Center
, Full aspect
.
- Узнать список доступных выводов и параметров:
$ xrandr --prop
- Команда для включения режима
Full aspect
для всех мониторов:$ for output in $(xrandr --prop | grep -E -o -i "^[A-Z\-]+-[0-9]+"); do xrandr --output "$output" --set "scaling mode" "Full aspect"; done
Виртуальный дисплей на системах без мониторов
Драйвер AMDGPU позволяет использовать виртуальные мониторы на headless-установках без применения заглушек. Это полезно для RDP и программ для стриминга игр вроде sunshineAUR.
Найдите GPU AMD, который вы хотите использовать:
$ lspci -Dd ::03xx
1234:56:78.9 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] МаркетинговоеИмя
Добавьте параметр модуля ядра virtual_display=1234:56:78.9,x
для модуля amdgpu
, где 1234:56:78.9
— это PCI-адрес нужного GPU, а x
— количество создаваемых виртуальных мониторов. Имейте в виду, что при использовании этого параметра физические мониторы будут отключены. [2]
Можно указать несколько GPU через точку с запятой:
amdgpu.virtual_display=1234:56:78.9,x;9876:54:32.1,y
Решение проблем
Параметры модуля
Модуль ядра amdgpu прячет некоторые параметры в битовых масках (modinfo amdgpu | grep mask
), информация о которых есть только в исходном коде ядра.
Xorg или приложения не запускаются
- glxgears не запускается с ошибкой «(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?».
- Xorg не запускается с ошибкой «(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver».
Установка глубины цвета в Xorg на 16 или 32 бита может приводить к подобным проблемам. Чтобы избежать их, следует использовать стандартную глубину цвета 24 бита:
/etc/X11/xorg.conf.d/10-screen.conf
Section "Screen" Identifier "Screen" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
Проблемы с артефактами и частотой экрана
Динамическое управление питанием может привести к появлению артефактов на экране при использовании мониторов с высокой частотой обновления (более 60 Гц) из-за проблем с управлением частотой[3][4].
Обходным решением [5] является установка фиксированного уровня производительности high
или low
как описано в разделе #Уровни производительности.
Изменение версии ядра также может помочь решить эту проблему (похоже, что она исправлена в Linux 6.12.9).
Артефакты в Chromium
Если в Chromium есть артефакты, попробуйте использовать бэкенд Vulkan. Откройте chrome://flags
и включите #ignore-gpu-blocklist
и #enable-vulkan
.
Низкая производительность и/или нестабильность на R9 390 series
Если у вас возникли проблемы [6] на AMD R9 390 series, укажите параметры ядра radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1 amdgpu.dc=1
, чтобы использовать драйвер amdgpu вместо драйвера radeon.
Если всё равно не работает, отключение DPM может помочь, укажите параметры ядра radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1
.
Зависания с ошибкой ядра «[drm] IP block:gmc_v8_0 is hung!»
Если при интенсивном использовании видеокарты возникают зависания и сбои ядра с ошибкой [drm] IP block:gmc_v8_0 is hung!
[7], в качестве обходного пути можно добавить параметр ядра amdgpu.vm_update_mode=3
, чтобы заставить обновление GPUVM page tables выполняться на процессоре. Недостатки перечислены здесь [8].
Экран мерцает белым/серым
Если при изменении разрешения или подключении внешнего монитора экран мерцает или остаётся белым, добавьте параметр ядра amdgpu.sg_display=0
.
Зависание или крах системы в играх на видеокартах Vega
Динамическое управление питанием может привести к полному зависанию системы во время игры из-за проблем с управлением частотой. [9] Обходным решением является установка фиксированного уровня производительности high
как описано в разделе #Уровни производительности.
Артефакты в WebRender (Firefox)
Принудительно включенный WebRender в настройках Firefox может приводить к артефактам и другим проблемам (например, невозможности выбирать пункты в выпадающих списках). В качестве обходного пути можно вернуться на OpenGL-композитинг.
Ускоренный звук или отсутствие звука при подключении устройства 4K@60Hz
Это иногда вызвано проблемой связи между устройством AMDGPU и 4K-дисплеем, подключенным по HDMI. Возможным решением проблемы является включение HDR или «Ultra HD Deep Color» через встроенные настройки дисплея. На многих Android-телевизорах это означает установку «Standard» вместо «Optimal».
Проблемы с управлением питанием / динамическое включение дискретной видеокарты amdgpu
Если вы столкнулись с проблемой, когда драйвер ядра загружается, но дискретная видеокарта по-прежнему недоступна для игр или отключается во время работы (аналогично [10]), вы можете обойти эту проблему, добавив параметр ядра amdgpu.runpm=0
, который предотвращает динамическое отключение питания дискретной видеокарты во время работы системы.
Зависание дисплея (flip_done timed out)
В драйвере amdgpu есть баг, из-за которого перестаёт обновляться изображение на дисплее [11]. В качестве обходного пути можно добавить параметр ядра amdgpu.dcdebugmask=0x10
или amdgpu.dcdebugmask=0x12
.
kfd: amdgpu: TOPAZ not supported in kfd
В журнале вы можете увидеть такое сообщение:
kfd: amdgpu: TOPAZ not supported in kfd
Если вы не планируете использовать Radeon Open Compute, это сообщение можно игнорировать (TOPAZ относится к старому поколению видеокарт и поэтому не поддерживается). [12] [13]
Высокое потребление энергии при бездействии из-за максимального MCLK (1000 МГц) или низкая производительность в играх из-за минимального MCLK (96 МГц)
При высоких разрешениях и частоте обновления MCLK (vram / memory clock) может быть заблокирован на самой высокой частоте (1000 МГц) [14] [15], что приводит к повышенному потреблению энергии видеокартой при бездействии. В ядре Linux 6.4.x MCLK заблокирован на самой низкой частоте (96 МГц), что приводит к низкой производительности в играх [16] [17].
Вероятно, это связано с тем, что монитор не использует Coordinated Video Timings (CVT) с низким значением V-Blank для соответствующих разрешений и частот обновления. Обходной путь описан в этом gist.
Не удаётся перейти в ждущий режим
При переходе в ждущий режим (S3) модуль ядра amdgpu
пытается сохранить содержимое видеопамяти в оперативной памяти.
Если у вас занято много видеопамяти и при этом мало свободной оперативной памяти, это может не сработать даже при наличии подкачки, поскольку подсистема ввода-вывода могла быть приостановлена ранее.
В журнале вы увидите что-то вроде:
kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0 kernel: Call Trace: kernel: <TASK> kernel: dump_stack_lvl+0x47/0x60 kernel: warn_alloc+0x165/0x1e0 kernel: __alloc_pages_slowpath.constprop.0+0xd7d/0xde0 kernel: __alloc_pages+0x32d/0x350 kernel: ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4]
В качестве обходного пути можно использовать пользовательскую службу, которая обеспечивает выделение достаточного объёма оперативной памяти для сохранения видеопамяти перед переходом в ждущий режим, вытесняя занятую оперативную память в подкачку.