Перейти к содержанию

PCI-устройства

Общие сведения

Раздел PCI-устройства позволяет подключить к ВМ физические устройства сервера (passthrough-устройств), подключенные по шине PCI/PCI-express.

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

Также некоторые устройства являются составными и не могут быть подключены к ВМ независимо.

Видеокарта может быть связана с аудиокодеком для HDMI. Некоторые сетевые карты могут быть 2/4/8-портовыми.

Составные устройства необходимо подключать к ВМ целиком.

При подключении к ВМ сетевых карт необходимо учитывать, что физическое устройство может быть занято для mgmt сети или для другого виртуального коммутатора.

Для подключения устройства PCI необходимо:

  1. В окне управления PCI-устройствами нажать на кнопку
    Подключить pci-устройство.

  2. В открывшемся окне выбрать устройство и контроллер из раскрывающегося списка.

  3. Подтвердить операцию, нажав кнопку OK.

Добавление PCI-устройства

  1. В CLI узла выполнить команду:

    system pci set on ''
    
  2. Перезагрузить узел.

  3. Подключить PCI-устройство.

    ВМ должна быть выключена.


Подключение видеокарты

  1. Открыть терминал сервера с установленной видеокартой.

  2. Выполнить команду CLI:

    shell
    
  3. Получить идентификаторы устройств видеокарты:

    lspci -nnv | grep VGA
    
    Пример вывода команды lspci -nnv | grep VGA
    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1) (prog-if 00 [VGA controller])
    
  4. Запомнить идентификатор видеокарты.

    Например, 01:00.

  5. Выполнить команду:

    lspci -s {ID} -n
    

    где {ID} - полученный идентификатор видеокарты.

    Пример вывода команды lspci -s 01:00 -n
    01:00.0 0300: 10de:1c82 (rev a1)
    01:00.1 0403: 10de:0fb9 (rev a1)
    
  6. Перейти из shell в CLI сервера:

    exit
    
  7. Отредактировать GRUB с помощью команды:

    system cmdline edit
    
  8. Указать в выводе команды следующие параметры:

    • Для видеокарт NVIDIA:

      cmdline:> quiet intel_iommu=on vfio-pci.ids=10de:1c82,10de:0fb9 pcie_acs_override=downstream,multifunction video=efifb:off video=vesa:off vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=nouveau,nvidia,nvidiafb,nvidia-gpu
      

      где vfio-pci.ids= - идентификаторы, полученные в выводе команды lspci -s {ID} -n.

    • Для видеокарты AMD:

      cmdline:> quiet amd_iommu=on vfio-pci.ids=10de:1c82,10de:0fb9 pcie_acs_override=downstream,multifunction video=efifb:off video=vesa:off vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau
      

      где vfio-pci.ids= - идентификаторы, полученные в выводе команды lspci -s {ID} -n.

  9. Нажать клавишу Enter для сохранения изменений.

  10. Выполнить команду:

    system pci set on ''
    
  11. Перезагрузить сервер.

  12. Выбрать ВМ и перейти на вкладку PCI-устройства.

    Внимание

    Необходимые параметры ВМ:

    • Чипсет: q35.

    • Тип загрузки: UEFI.

    • ВМ выключена.

  13. Нажать кнопку Подключить pci-устройство.

  14. Выбрать необходимое устройство и нажать кнопку ОК.

Примечание

При необходимости использования видеокарты без виртуального графического адаптера на ВМ с ОС Windows в видеокарту следует подключить монитор (или его эмулятор) и подключиться по заранее настроенному RDP.


Дополнительная информация

Чтобы включить функцию предоставления доступа ВМ к части устройства SR-IOV, необходимо указать параметр intel_iommu=on или amd_iommu=on, в зависимости от конфигурации сервера, в конфигурационном файле загрузчика grub. Чтобы добиться максимальной производительности при использовании SR-IOV, следует задать параметр iommu=pt в файле конфигурации загрузчика grub. В случае доступа ВМ к адаптеру напрямую не требуется использование преобразования DMA, за счет чего и улучшается производительность системы. Параметр iommu=pt необходим в основном для гипервизора и не влияет на работу ВМ. Если intel_iommu=on или amd_iommu=on работает, можно заменить их на iommu=pt или amd_iommu=pt в зависимости от конфигурации узла. Параметр pt включает IOMMU только для тех устройств, доступ к которым предоставлен ВМ и обеспечивает лучшую производительность узла.

Оригинал на английском языке

To enable SR-IOV in the kernel, configure intel_iommu=on in the grub file. To get the best performance, add iommu=pt (pass-through) to the grub file when using SR-IOV. When in pass-through mode, the adapter does not need to use DMA translation to the memory, and this improves the performance. iommu=pt is needed mainly with hypervisor performance is needed. If intel_iommu=on or amd_iommu=on works, you can try replacing them with iommu=pt or amd_iommu=pt. The pt option only enables IOMMU for devices used in passthrough and will provide better host performance.

В чем разница между PCI pass-through устройств к ВМ и IOMMU?

PCI pass-through не требует вмешательств гипервизора для работы гостевой ОС с физическим устройством. IOMMU при работе не использует DMA трансляции гипервизора.

Таким образом, гипервизору не нужно обрабатывать запросы DMA, когда включен режим IOMMU. PCI pass-through и IOMMU работают совместно для обеспечения доступа гостевой ОС напрямую к физическому устройству.

Оригинал на английском языке

What is the difference between PCI pass-through and IOMMU pass-through? PCI pass-through model bypasses the hypervisor’s intervention to render the guest OS to take control of the physical device directly. IOMMU pass-through mode bypasses the DMA translation from the hypervisor. The hypervisor does not need to process DMA requests when IOMMU pass-through mode is enabled in Linux. PCI pass-through and IOMMU pass-through work collaboratively to enable the guest OS to have the direct control of the physical device.