Product SiteDocumentation Site

30.6.7. Проброс PCI(e)

Проброс PCI(e) — это механизм, позволяющий ВМ напрямую управлять PCI(e)-устройством хоста.

Примечание

Если устройство передано в ВМ, его нельзя использовать на хосте или в другой ВМ.
Поскольку проброс PCI(e) требует аппаратной поддержки, необходимо убедиться, что ваше оборудование (ЦП и материнская плата) поддерживает технологию IOMMU (I/O Memory Management Unit).
Если оборудование поддерживает проброс, необходимо выполнить следующую настройку:
  1. Включить поддержку IOMMU в BIOS/UEFI.
  2. Для процессоров Intel — передать ядру параметр intel_iommu=on (для процессоров AMD поддержка IOMMU обычно включается автоматически).
  3. Убедиться, что загружены следующие модули (при необходимости добавьте их в файл /etc/modules):
    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    
  4. Перезагрузить систему, чтобы изменения вступили в силу, и убедиться, что проброс действительно включен:
    # dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
    
Наиболее распространённый вариант проброса PCI(e) — проброс всей PCI(e)-карты (например, GPU или сетевой карты). В этом случае хост не должен использовать данное устройство. Этого можно добиться двумя способами:
  1. Передать идентификаторы устройств модулю vfio-pci. Для этого добавьте, например, в файл /etc/modprobe.d/vfio.conf строку:
    options vfio-pci ids=1234:5678,4321:8765
    где 1234:5678 и 4321:8765 — идентификаторы производителя (vendor) и устройства (device).
    Посмотреть идентификаторы можно с помощью команды:
    # lspci -nn
    
  2. Добавить драйвер устройства в чёрный список. Для этого в файл /etc/modprobe.d/blacklist.conf добавьте строку:
    blacklist DRIVERNAME
После внесения изменений необходимо перезагрузить систему.
Добавить устройство PCI в ВМ можно следующими способами:
  • в веб-интерфейсе: разделе Оборудование кнопка ДобавитьУстройство PCI:
    PVE. Добавление устройства 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