AMDGPU (Русский) - ArchWiki

Jump to content

# AMDGPU (Русский)

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

Ссылки по теме

- ATI (Русский)
- Xorg (Русский)
- Vulkan (Русский)
- AMDGPU PRO (Русский)

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 (из-за сортировки по алфавиту), он позволяет избежать некоторых проблем, о которых сообщали пользователи драйвера amdvlkAUR;
  - если установлен пакет amdvlkAUR, он назначает себя драйвером Vulkan по умолчанию; если вам необходимо использовать оба драйвера (например, если есть проблемы с драйвером vulkan-radeon), переключайте используемый драйвер как описано в разделе Vulkan (Русский)#Выбор с помощью переменной окружения;
  - для поддержки 32-битных приложений также установите lib32-vulkan-radeon и/или lib32-amdvlkAUR соответственно.

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

Иногда имеет смысл попробовать экспериментальную сборку 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` и `radeon` — `cik_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` должен загрузиться автоматически.

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

- проверьте #Включение поддержки 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-битный цвет

Важно При включении 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]

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

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

- Gentoo:AMDGPU
- Баг-трекер AMDGPU

Categories:

- Graphics (Русский)
- X server (Русский)

AMDGPU (Русский)
Add topic