Jump to content

AMDGPU (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи AMDGPU. Дата последней синхронизации: 1 июля 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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:

Экспериментальные версии

Иногда имеет смысл попробовать экспериментальную сборку 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 это не требуется.
Совет: Пользователи, которые не хотят самостоятельно собирать пакет mesa-gitAUR, могут подключить неофициальный репозиторий mesa-git.

Включение поддержки 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 и radeoncik_support= и si_support=.

Их нужно прописать в параметрах ядра или в файле настроек modprobe, а конкретные значения зависят от версии GCN.

Можно использовать оба параметра, если вы не знаете версию GCN своей видеокарты.

Совет: dmesg может вывести правильные значения параметров: [..] 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 должен загрузиться автоматически.

Если он не загружается:

Возможно, модуль загружается, но слишком поздно. В таком случае проверьте, включен ли у вас ранний запуск 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-битный цвет

Важно: При включении 10-битного цвета многие приложения могут давать графические артефакты или аварийно завершать работу. К таким приложениям, в частности, относится Steam, при запуске которого возникает ошибка X Error.

Новые карты 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.
https://github.com/Umio-Yasuno/amdgpu_top || amdgpu_top
  • nvtop — Мониторинг видеокарт AMD, Intel и NVIDIA.
https://github.com/Syllo/nvtop || nvtop
  • radeontop — Просмотр загрузки GPU, как для общего процента активности, так и для отдельных блоков.
https://github.com/clbr/radeontop || radeontop

Графические инструменты

  • amdgpu_top — Инструмент для отображения использования AMDGPU.
https://github.com/Umio-Yasuno/amdgpu_top || amdgpu_top
  • AmdGuid — Базовый графический интерфейс управления вентиляторами, полностью написанный на Rust.
https://github.com/Eraden/amdgpud || amdguid-wayland-binAUR, amdguid-glow-binAUR
  • Radeon Profile — Инструмент для чтения и изменения частот видеокарт AMD Radeon, использующий Qt 5.
https://github.com/emerge-e-world/radeon-profile || radeon-profile-gitAUR
  • TuxClocker — Инструмент для мониторинга и разгона, использующий Qt 5.
https://github.com/Lurkki14/tuxclocker || tuxclockerAUR

Вручную

Проверка 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))"

Вручную

Примечание: В sysfs пути вида /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
Примечание: Приведённые выше команды тестировались на видеокарте Polaris RX 560. На других видеокартах диапазон доступных значений, поведение и баги могут отличаться.

С помощью вспомогательных программ

Если вы не хотите вписывать параметры разгона вручную, есть поддерживаемые сообществом программы, которые упрощают это.

Консольные
  • amdgpu-clocks — Скрипт, который можно использовать для мониторинга и установки пользовательских режимов питания для видеокарт AMD. Он также предлагает службу systemd для автоматического применения настроек при загрузке системы.
https://github.com/sibradzic/amdgpu-clocks || amdgpu-clocks-gitAUR
  • ruby-amdgpu_fan — Интерфейс командной строки для взаимодействия с Linux-драйвером amdgpu, написанный на Ruby.
https://github.com/HarlemSquirrel/amdgpu-fan-rb || ruby-amdgpu_fanAUR
Графические
  • TuxClocker — Инструмент для мониторинга и разгона, использующий Qt 5.
https://github.com/Lurkki14/tuxclocker || tuxclockerAUR
  • CoreCtrl — Инструмент для разгона с графическим интерфейсом, похожим на WattMan, с поддержкой профилей для отдельных приложений.
https://gitlab.com/corectrl/corectrl || corectrl
  • LACT — GTK-инструмент для просмотра информации и управления видеокартой AMD. Конфликтует с power-profiles-daemon; отключите amdgpu_dpm в параметрах последнего во избежание конфликтов. [1]
https://github.com/ilya-zlobintsev/LACT || lact
  • Radeon Profile — Инструмент для чтения и изменения текущих частот видеокарт AMD Radeon, использующий Qt 5.
https://github.com/emerge-e-world/radeon-profile || radeon-profile-gitAUR

Применение параметров при загрузке системы

Один из способов — использовать юниты 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]

В качестве обходного пути можно использовать пользовательскую службу, которая обеспечивает выделение достаточного объёма оперативной памяти для сохранения видеопамяти перед переходом в ждущий режим, вытесняя занятую оперативную память в подкачку.

Смотрите также