Глиф Учебники

Как пробросить видеокарту в ВМ

Справочник · Proxmox VE · 3 минуты чтения

Проброс (passthrough) отдаёт машине настоящее устройство сервера: видеокарту, сетевую карту, контроллер дисков. Машина работает с ним напрямую, как с собственным. Пока устройство проброшено, сам сервер и другие машины им пользоваться не могут.

Общий порядок: включить IOMMU в BIOS, загрузить модули vfio, проверить группы IOMMU, добавить устройство в машину. Работает не на любом оборудовании — многое зависит от материнской платы. IOMMU — механизм процессора и платы, который даёт машине прямой доступ к устройству и при этом защищает от него остальную память сервера.

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

Шаг 1. IOMMU в BIOS

Включите в BIOS/UEFI пункт VT-d (Intel) или IOMMU / AMD-Vi (AMD). Название зависит от платы — ищите в инструкции к ней.

В ядре Linux IOMMU для процессоров AMD включён по умолчанию, а для Intel — начиная с ядра 6.8. В Proxmox VE 9 ядра новее, поэтому параметр intel_iommu=on, который встречается в старых инструкциях, не нужен.

Шаг 2. Модули vfio

Создайте файл со списком модулей:

Bash
nano /etc/modules-load.d/vfio.conf

С тремя строками:

Текст
vfio
vfio_iommu_type1
vfio_pci

Обновите initramfs (начальный образ, из которого ядро при загрузке берёт модули) и перезагрузите сервер:

Bash
update-initramfs -u -k all
reboot

Шаг 3. Проверка

Bash
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
lsmod | grep vfio

В выводе первой команды должны быть строки о включённом IOMMU (у Intel — DMAR, у AMD — AMD-Vi; текст зависит от оборудования), вторая должна показать три модуля vfio.

Устройство должно быть в своей группе IOMMU — вместе с ним можно передать только его же функции (например, видеокарта и её звук HDMI). Группы видны в окне добавления устройства в машину, а в терминале — так:

Bash
pvesh get /nodes/pve/hardware/pci --pci-class-blacklist ""

Вместо pve — имя вашего узла. Если видеокарта в одной группе с другими устройствами, иногда помогает перестановка её в другой слот PCIe.

Шаг 4. Машина

Для видеокарты лучше всего работают машины с типом q35 и прошивкой OVMF (UEFI) — это выбирается на вкладке System при создании (менять у установленной системы рискованно). Добавьте устройство: машина → Hardware → Add → PCI Device → Raw Device, выберите видеокарту, отметьте All Functions (видеокарта вместе со звуком) и PCI-Express. То же в терминале, где 01:00 — адрес из lspci:

Bash
qm set 100 -hostpci0 01:00,pcie=on

Запустите машину и поставьте внутри драйвер видеокарты, как на обычном компьютере.

Если хост не отдаёт видеокарту

Proxmox сам пытается отцепить устройство от драйвера сервера. Если не выходит, привяжите его к vfio-pci по номерам производителя и модели. Узнайте их:

Bash
lspci -nn

Номера — в квадратных скобках в конце строки, вида [10de:1d01]. Запишите их в файл /etc/modprobe.d/vfio.conf строкой (номера — свои, через запятую для видео и звука):

Текст
options vfio-pci ids=10de:1d01,10de:0fb8

Снова update-initramfs -u -k all и перезагрузка. Проверка: lspci -nnk у устройства показывает Kernel driver in use: vfio-pci.

Подводные камни

Подробности и примеры для разных видеокарт — в разделе PCI(e) Passthrough руководства администратора и на вики PCI Passthrough.