Проброс PCI(e) — это механизм, позволяющий ВМ управлять устройством PCI(e) хоста.
Если устройство передано на ВМ, его нельзя будет использовать на хосте или в любой другой ВМ.
Поскольку проброс PCI(e) — это функция, требующая аппаратной поддержки, необходимо убедиться, что ваше оборудование (ЦП и материнская плата) поддерживает IOMMU (I/O Memory Management Unit).
Если оборудование поддерживает проброс, необходимо выполнить следующую настройку:
Включить поддержку IOMMU в BIOS/UEFI.
Для процессоров Intel — передать ядру параметр intel_iommu=on
(для процессоров AMD он должен быть включен автоматически).
Убедиться, что следующие модули загружены (этого можно добиться, добавив их в файл
/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 — идентификаторы поставщика и устройства.
Посмотреть идентификаторы поставщика и устройства можно в выводе команды:
# 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