Product SiteDocumentation Site

40.5.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 он должен быть включен автоматически).
  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 или сетевой карты. В этом случае хост не должен использовать карту. Этого можно добиться двумя методами:
  • передать идентификаторы устройств в параметры модулей 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 ВМ:
  • в веб-интерфейсе (ДобавитьУстройство 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