Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Гибриды AMD + Intel: PRIME, оффлоад и синхронизация

Связка Intel iGPU + AMD dGPU встречается в ноутбуках и старых десктопах, где дискретную карту поставили рядом со встроенной, а панель ноутбука навсегда осталась на Intel. Управляет такой гибридом PRIME: приложения уводятся на AMD переменной DRI_PRIME, а кадры с карты синхронизируются с экраном iGPU через PRIME sync. Ниже — рабочие настройки для Xorg и Wayland, разбор того, откуда берутся разрывы кадра, и диагностика, которая покажет, кто именно рисует картинку.

Как устроена связка Intel iGPU + AMD dGPU?

Встроенная графика живёт внутри процессора Intel (UHD Graphics, Iris Xe, новые линейки Xe), питается от него же и почти всегда включена: она отвечает за ноутбучную панель, за вывод изображения на экран логина и за композитинг рабочего стола. Дискретная AMD (Radeon) стоит на PCIe, греется, жрёт заметную часть энергии в простое и берёт на себя тяжёлые задачи — игры, видеомонтаж, вычисления.

Проблема ровно в том, что панель физически подключена к iGPU. У dGPU нет прямого пути к этому экрану, поэтому картинка с неё попадает на панель через копирование буферов — и этот переход нужно синхронизировать. Отсюда и весь класс странных симптомов: рваные полосы, мигающие блоки, «дёрганье» в меню.

Тенденция последних лет — гибриды NVIDIA + Intel: дискретная часть там почти всегда GeForce. Связка Intel + AMD вышла из моды и встречается в основном в старых ноутбуках и в сборках «десктопная плата + дискретная карта», где встроенную Intel не отключили. Механика PRIME от этого не меняется — это слой Mesa, а не фирменная технология одной компании. Смешанные конфигурации сразу двух дискретных карт разобраны отдельно в материале про одновременную работу NVIDIA и AMD.

Как включить оффлоад на AMD через DRI_PRIME?

Механизм простой: переменная окружения говорит Mesa, какой провайдер открыть для приложения. Нумерация идёт по порядку, а не по именам карт.

DRI_PRIME=1 glxgears          # принудительно на вторую карту (AMD)
DRI_PRIME=0 glxgears          # только на первой (Intel)
DRI_PRIME=2 glxgears          # авто-выбор, решение принимает Mesa
DRI_PRIME=3 glxgears          # дать доступ ко всем провайдерам сразу

Для обычного запуска хватает единицы, ведь Intel всегда идёт первым. Проверить, что оффлоад вообще заработал, проще всего по одной игре:

DRI_PRIME=1 glxgears -info

Если в выводе строки DRI_PRIME=1, значит открылся второй провайдер. Чтобы не набирать префикс каждый раз, удобно закрепить переменную в окружении пользователя:

systemctl --user set-environment DRI_PRIME=1
DRI_PRIME=1 bash -c 'echo $DRI_PRIME'

Первый способ действует на все приложения, запущенные через D-Bus из сессии, второй — разово на любую команду. Тот же приём работает в параметрах запуска в Steam, в Exec= строке .desktop-файла и в переменных systemd-юнита. Провайдер можно указать и точнее — по адресу устройства на шине, если порядок карт тебя смущает:

DRI_PRIME=pci-0000:01:00.0 vulkaninfo

Автоматический выбор (DRI_PRIME=2) полезен там, где приложение само запрашивает «дайте лучший гpu»: многие игры так делают через Vulkan и Wayland, и им подсказка не нужна.

Почему на двух экранах рвётся картинка и что делает PRIME sync?

Смотри сценарий: игра рисует кадр на AMD, окно лежит на рабочем столе, который отрисовывает Intel, и физически панель подключена к Intel. Между двумя GPU нужен обмен: драйвер amdgpu отдаёт готовый буфер, драйвер i915 забирает его для вывода. Если обмен не синхронизирован по кадру, i915 может показать полуготовую картинку — это и есть разрывы, тиринг, «мусор» из блоков в меню и в видео.

PRIME sync решает это через KMS-фенсы: одна видеокарта ждёт сигнала от другой, что кадр полностью посчитан. Включается он в конфиге Xorg, отдельной опцией драйвера amdgpu:

Section "OutputDevice"
    Identifier  "AMDGPU"
    Driver      "amdgpu"
    Option      "PRIME sync" "on"
    Option      "PrimaryGPU" "yes"
    BusID       "PCI:1:0:0"
EndSection

PrimaryGPU yes переводит вывод изображения на dGPU — так внешний монитор и панель рисует AMD, а Intel остаётся только для терминала. PRIME sync on синхронизирует оставшийся iGPU-вывод с кадрами AMD.

Про советы из статей про NVIDIA: опции ForceFullCompositionPipeline в amdgpu просто нет, и в конфиг её вписывать бессмысленно — это механизм проприетарного драйвера. Рабочий аналог здесь один, это PRIME sync, и в свежих ядрах (ветка 6.x) он работает с amdgpu без танцев. На Wayland синхронизацию берёт на себя композитор, отдельно включать ничего не нужно.

Как настроить PRIME в Xorg через xorg.conf и xrandr?

Современный Xorg живёт без xorg.conf и сам генерирует конфиг из xlogind, но для PRIME удобно вернуть явный файл в /etc/X11/xorg.conf.d/. Главное — не отказываться от драйвера Modesetting: он даёт нормальное ускорение обеим картам, и именно с ним работает PRIME sync.

# /etc/X11/xorg.conf.d/20-prime.conf
Section "Device"
    Identifier  "iGPU"
    Driver      "i915"
EndSection

Section "Device"
    Identifier  "AMDGPU"
    Driver      "amdgpu"
    BusID       "PCI:1:0:0"
    Option      "PRIME sync" "on"
    Option      "PrimaryGPU" "yes"
EndSection

После правки нужен перезапуск графической сессии, а не systemctl restart display-manager поверх работающего Xorg: сервер может не подняться, и придётся возвращаться в TTY и править конфиг оттуда.

Посмотреть, каких провайдеров Xorg нашёл, можно одной командой:

xrandr --listproviders

Вывод покажет строки вроде 0: Intel ... и 1: AMD .... Дальше можно либо переключить источник вывода для монитора, либо запустить на второй карте вложенный X-сервер:

xrandr --setprovideroutputsource 1 0
xrun --dri --device 1 glxgears

--setprovideroutputsource 1 0 переносит вывод монитора на второй провайдер. Цена решения — панель и внешний экран показывают независимые рабочие столы, то есть перетащить окно между ними не получится. Для игр это обычно не важно, а для работы с двумя мониторами удобнее первый вариант.

Что меняется на Wayland в KDE Plasma и GNOME?

На Wayland ручной конфиг не нужен. KWin в Plasma и Mutter в GNOME сами опрашивают провайдеров, сами решают, где рисовать интерфейс, и сами включают синхронизацию кадров. xorg.conf в этой среде просто игнорируется, а xrandr не существует — вместо него есть только wlr-randr для wlroots-окружений.

DRI_PRIME=1 продолжает работать один в один, только задавать его удобнее через systemd-run --user -p Environment=DRI_PRIME=1:

systemd-run --user --scope -p Environment=DRI_PRIME=1 steam

В GNOME при Intel + AMD композитор традиционно живёт на встроенной графике, а приложения по требованию уходят на дискретную. В Plasma с профилем «две видеокарты» можно дополнительно бросить оффлоад целиком на AMD. Практический совет простой: на Wayland не трогай то, что композитор уже настроил, и лечи артефакты через настройки композиции Plasma — там есть пункт про синхронизацию с vblank и про тройную буферизацию, а не через конфиг драйвера.

Сколько стоит оффлоад и стоит ли отключать iGPU в BIOS?

В тяжёлых сценах цена минимальна: игра целиком уходит на dGPU, разница с монопольным запуском обычно укладывается в несколько процентов кадров. Настоящая плата появляется там, где сцена лёгкая: копирование буферов, композитинг рабочего стола, видео с YouTube. Здесь потери ощутимее — прирост FPS на 3D-сцене может вообще отсутствовать, а лишняя память GPU уходит на промежуточные буферы. Именно поэтому PRIME sync иногда выглядит «медленнее»: он добавляет ожидание, зато убирает разрывы. Для игр правильнее выбрать целостность картинки.

Отключать iGPU в BIOS здесь не советуют. Панель ноутбука уходит в темноту вместе с логином экрана, ломается suspend и гибридный сон, а выигрыша в энергопотреблении почти нет — встроенная карта в простое ест единицы ватт. Экономнее оставить её включённой и просто не отдавать ей ничего тяжёлого.

Отдельная история — панель. Если на внутреннем экране при прокрутке видны полосы или мерцание, попробуй параметр ядра, отключающий энергосбережение панели:

# /etc/modprobe.d/i915-psr.conf
options i915 enable_psr=0

Затем пересобери initramfs и перезагрузись. На части ноутбуков это убирает артефакты, на остальных ничего не меняет — хуже не станет.

Как проверить, какая карта рисует кадр?

Быстрый способ — посмотреть строки рендерера:

glxinfo | grep -E "OpenGL renderer|EGL vendor"
DRI_PRIME=1 glxinfo | grep -E "OpenGL renderer|EGL vendor"

Если в двух запусках OpenGL renderer string различается, оффлоад работает. Для Vulkan-приложений смотри vulkaninfo --summary и раздел deviceName.

Дальше — проверить, что оба драйвера вообще загрузились и карта видна шине:

lsmod | grep -E "amdgpu|i915"
lspci -k | grep -A 3 -E "VGA compatible|3D controller"

Нумерация провайдеров в Xorg и в Wayland может различаться, поэтому сверяйся с выводом xrandr --listproviders, а не с порядком карт в lspci. Подробнее о том, как одна встроенная карта ведёт себя без второй, я разбирал в материале про APU Radeon и amdgpu.

Частые вопросы

Почему игра с DRI_PRIME=1 идёт с той же скоростью, что и на iGPU?

Скорее всего, игра упирается в процессор, память или узкое место видеопамяти, а не в GPU. Проверь счётчики: если FPS в пределах vsync, увеличение мощности ничего не даст. Для замера выключи вертикальную синхронизацию и посмотри на реальный потолок кадров.

Как понять, какая карта стала основной в Xorg?

xrandr --listproviders перечисляет провайдеров и помечает активный. Дополнительно смотри, кто владеет pty: если внутренний экран числится за amdgpu, значит PrimaryGPU yes сработал иначе.

Можно ли держать рабочий стол на Intel, а игру на AMD без разрывов?

Да, так и настроен дефолтный сценарий: композитор на Intel, игра в окне на AMD. Разрывы убирает PRIME sync, а не смена основной карты. Если после его включения артефакты остались, проверь, что в dmesg нет сообщений от kms о неудачных фенчах.

Почему после правки xorg.conf сессия перестала стартовать?

Обычно виноват BusID в неверном формате либо драйвер, отличный от Modesetting. Загрузись в TTY, временно убери файл из /etc/X11/xorg.conf.d/ и проверь журнал: journalctl -b -u display-manager | tail -50.

Полезные ресурсы

  • PRIME (ArchWiki) — официальная страница про переключение видеокарт, DRI_PRIME и PrimaryGPU.
  • AMDGPU (ArchWiki) — параметры драйвера amdgpu, энергосбережение и известные проблемы.
  • Гибридная графика, PRIME и Run In Steam — практическая сторона переключения карт в играх и утилитах.

Заключение

PRIME с Intel + AMD работает по тем же правилам, что и с NVIDIA: переменная DRI_PRIME выбирает провайдер, а PRIME sync следит, чтобы кадр дошёл до экрана целиком. Держи панель на встроенной карте, не отключай iGPU в BIOS, а разрывы кадра лечи включением Option "PRIME sync" "on" в xorg.conf — на Wayland это уже сделано за тебя.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max