Проброс видеокарты (Intel GVT-g GPU Passthrough)
Привет, гик! Сидишь тут со своим мощным процессором Intel, у которого есть встроенная графика, а ты её только для вывода рабочего стола Proxmox используешь? Непорядок. Это всё равно что купить спортивную машину и кататься на ней только до магазина и обратно. Давай-ка раскроем её потенциал и подарим аппаратное ускорение виртуальным машинам! Сегодня будем делиться встроенной графикой (iGPU) между виртуальными машинами в Proxmox с помощью технологии Intel GVT-g.
Intel GVT-g (Graphics Virtualization Technology for Guest) — это технология виртуализации графики от Intel, предназначенная для эффективного распределения ресурсов интегрированных графических процессоров (iGPU), таких как Intel UHD Graphics, между несколькими виртуальными машинами (VM) и контейнерами.
Поддерживаемые процессоры
Intel GVT-g поддерживается только на процессорах Intel 5-10 поколения!
Поддерживаемые семейства процессоров:
- Broadwell
- Skylake
- Kaby Lake
- Coffee Lake
- Comet Lake
Подготовка BIOS
Убедитесь, что Intel VT-d
активирована в BIOS вашего хост-компьютера(proxmox). В зависимости от модели материнской платы, эта функция может называться «Включить технологию виртуализации».
Чтобы Intel GVT-g мог предложить максимальное количество профилей, выделите как можно больше видеопамяти для интегрированного графического процессора (iGPU). Для этого увеличьте размер интегрированного графического устройства (IGD) в BIOS до максимально возможного уровня.
Конфигурация Proxmox
В Proxmox необходимо позаботиться о двух вещах: настройке модулей ядра и загрузчика GRUB.
Шаг 1: Настройка модулей ядра
Теперь нужно добавить модули ядра и задать для них параметры, чтобы обеспечить сквозную передачу PCIe. Для этого отредактируйте или создайте следующие файлы:
# Modules required for PCIe passthrough
vfio
vfio_pci
vfio_iommu_type1
vfio_virqfd
# Modules required for Intel GVT
kvmgt
exngt
vfio_mdev
blacklist nouveau
blacklist nvidia
blacklist radeon
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist snd_sof_pci
options drm debug=0
options i915 enable_gvt=1
options i915 enable_guc=0
options kvm ignore_msrs=1
options kvm report_ignored_msrs=0
options vfio_iommu_type1 allow_unsafe_interrupts=1
Таким образом, создавая отдельные файлы конфигурации в modprobe, мы можем гарантировать, что параметр GRUB_CMDLINE_LINUX
не будет чрезмерно расширен.
Обновите изменения конфигурации, выполнив команду:
update-initramfs -u -k all
Шаг 2: Настройка GRUB
Отредактируйте файл конфигурации GRUB и измените параметр GRUB_CMDLINE_LINUX
следующим образом:
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"
Чтобы применить эти изменения, обновите GRUB и перезапустите систему:
update-grub
shutdown -r now
После перезагрузки убедитесь, что IOMMU включен:
dmesg | grep -e DMAR -e IOMMU
Конфигурация виртуальной машины с Windows
Шаг 1: Создаём правильную основу
Переходим в веб-интерфейс Proxmox и создаём новую виртуальную машину. Но не как обычно, а с особыми настройками:
- Память:
Динамическое изменение размера памяти — ОТКЛЮЧЕНО
(иначе наш vGPU может упасть в обморок). - Процессор: Выставляем
host
. - BIOS: Обязательно
OVMF (UEFI)
. Без этого даже не пытайтесь. - Машина: Выбираем
pc-q35
. Это не обсуждается.
Пока не добавляем никаких устройств PCIe, только базовый набор. Устанавливаем Windows через виртуальный дисплей (Proxmox Display Console), как привыкли.
Важный совет
Заранее скачайте последнюю стабильную версию драйверов VirtIO и залейте её на хост. Они нам понадобятся сразу после установки системы. А также при установке Windows если вы выбрали Контроллер SCSI - VirtIO SCSI single
, что является хорошим выбором.
Шаг 2: Устанавливаем драйверы и "прячем" виртуальный экран
После установки Windows подключаем образ с драйверами VirtIO через интерфейс Proxmox. Заходим в виртуальную машину, идём в проводник, находим наш CD-диск и запускаем virtio-win-guest-tools.exe
от имени администратора. Проходим все шаги мастера установки.
Теперь — самый ответственный момент. Выключаем виртуальную машину. Заходим в её настройки, в раздел Оборудование
, находим виртуальный Экран
и меняем его значение на нет (none)
.
Важно
После этого Proxmox Display Console перестанет работать. Не паникуйте! Для дальнейшей работы мы будем использовать встроенный в Windows RDP (Remote Desktop). Убедитесь, что он включён.
Шаг 3: Добавляем волшебный vGPU
В тех же настройках оборудования жмём Добавить
-> Устройство PCI
.
- Raw-устройство: В выпадающем списке ищем наш iGPU. Ориентироваться можно по PCI ID (например,
0000:00:02.0
). - Тип MDev: Здесь появится список доступных типов виртуальных GPU. Выбираем самый производительный из доступных (например,
i915-GVTg_V5_4
). - Ставим галочки на
Основной графический процессор
,PCI-Express
иROM-Bar
. - Жмём
Добавить
.
Включаем машину. Подключаемся к ней через RDP (для этого нужно знать её IP-адрес в виртуальной сети).
Шаг 4: Финальный аккорд — драйверы Intel
Скачиваем с официального сайта Intel последние драйверы для нашего процессора (например, для UHD Graphics 630) и устанавливаем их. После заходим в Диспетчер устройств. Вы должны увидеть в разделе "Видеоадаптеры" устройство Intel(R) UHD Graphics 630
.
Всё! Теперь ваша Windows-виртуальная машина умеет в аппаратное ускорение, монтаж видео и игры через встроенную графику.
Конфигурация виртуальной машины с Linux (на примере Debian)
С Linux всё немного проще, ведь нам не нужны проприетарные драйверы для первичной настройки.
Шаг 1: Создаём такую же основу
Создаём ВМ с теми же параметрами, что и для Windows:
- Память: без динамического изменения.
- Процессор:
host
. - BIOS:
OVMF (UEFI)
. - Машина:
pc-q35
.
Устанавливаем Debian через Proxmox Console. После установки и первого входа обновляем систему и ставим qemu-guest-agent
:
apt update
apt upgrade -y
apt install qemu-guest-agent openssh-server -y
Обязательно ставим SSH-сервер! Без него после следующего шага мы потеряем доступ к консоли. После установки выключаем машину для решающих изменений.
shutdown -h now
Шаг 2: Добавляем vGPU и "прячем" дисплей
В настройках оборудования ВМ так же, как и для Windows:
- Меняем
Экран
нанет (none)
. - Жмём
Добавить
->Устройство PCI
. - Выбираем наш iGPU и нужный
Тип MDev
. - Ставим галочки на
Основной графический процессор
,PCI-Express
иROM-Bar
. - Добавляем устройство.
Запускаем машину. Теперь подключаемся к ней только по SSH.
Шаг 3: Подружим Linux с нашим виртуальным GPU
Подключаемся по SSH и проверяем, видит ли система наш подаренный GPU:
lspci | grep 'VGA'
Если вы видите строчку с Intel Corporation UHD Graphics
— значит, устройство передалось успешно!
Теперь нужно установить драйверы и необходимые библиотеки. Для Debian/Ubuntu это делается одной командой:
apt install -y intel-media-va-driver-non-free libva-drm2 libva-x11-2 vainfo
Этого достаточно для большинства задач аппаратного ускорения (декодирование видео в браузере, в mpv и т.д.). Чтобы проверить, что всё работает, выполните:
vainfo
В выводе вы должны увидеть список поддерживаемых форматов кодирования/декодирования (например, H.264, HEVC). Если vainfo
ругается на не найденный display, просто перезагрузите виртуальную машину:
reboot
После перезагрузки снова проверьте vainfo
. Если список форматов появился — поздравляем! Вы только что подарили своей Linux-виртуальной машине мощное аппаратное ускорение.
Для полного счастья (например, для работы с GL) может потребоваться установка дополнительных пакетов:
apt install -y mesa-va-drivers mesa-vulkan-drivers
Теперь ваши виртуальные машины с Windows и Linux могут использовать мощи встроенной графики, а вы — продолжаете спокойно работать в Proxmox. Магия разделения ресурсов!