Проброс PCI(e) — это механизм, позволяющий ВМ напрямую управлять PCI(e)-устройством хоста.
Если устройство передано в ВМ, его нельзя использовать на хосте или в другой ВМ.
Поскольку проброс PCI(e) требует аппаратной поддержки, необходимо убедиться, что ваше оборудование (ЦП и материнская плата) поддерживает технологию IOMMU (I/O Memory Management Unit).
Если оборудование поддерживает проброс, необходимо выполнить следующую настройку:
Включить поддержку IOMMU в BIOS/UEFI.
Для процессоров Intel — передать ядру параметр intel_iommu=on (для процессоров AMD поддержка IOMMU обычно включается автоматически).
Убедиться, что загружены следующие модули (при необходимости добавьте их в файл
/etc/modules):
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Перезагрузить систему, чтобы изменения вступили в силу, и убедиться, что проброс действительно включен:
# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
Наиболее распространённый вариант проброса PCI(e) — проброс всей PCI(e)-карты (например, GPU или сетевой карты). В этом случае хост не должен использовать данное устройство. Этого можно добиться двумя способами:
Передать идентификаторы устройств модулю vfio-pci. Для этого добавьте, например, в файл
/etc/modprobe.d/vfio.conf строку:
options vfio-pci ids=1234:5678,4321:8765
где 1234:5678 и 4321:8765 — идентификаторы производителя (vendor) и устройства (device).
Посмотреть идентификаторы можно с помощью команды:
# lspci -nn
Добавить драйвер устройства в чёрный список. Для этого в файл
/etc/modprobe.d/blacklist.conf добавьте строку:
blacklist DRIVERNAME
После внесения изменений необходимо перезагрузить систему.
Добавить устройство PCI в ВМ можно следующими способами:
в веб-интерфейсе: разделе Оборудование кнопка → :
В веб-интерфейсе одной ВМ можно назначить до 16 устройств PCI(e).
в командной строке:
# qm set VMID -hostpci0 00:02.0
Если устройство имеет несколько функций (например, 00:02.0 и 00:02.1), можно использовать сокращённый синтаксис 00:02. Это эквивалентно установке отметки Все функции в веб-интерфейсе.
Идентификаторы производителя и устройства PCI могут быть переопределены в конфигурации проброса. Они необязательно должны соответствовать фактическим идентификаторам физического устройства. Доступные параметры: vendor-id, device-id, sub-vendor-id и sub-device-id. Можно указать любой из них или все сразу, например:
# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000