PCI-устройства
Общие сведения
Раздел PCI-устройства позволяет подключить к ВМ физические устройства сервера (passthrough-устройств), подключенные по шине PCI/PCI-express.
Необходимо учитывать, что подключение аппаратных средств сервера в ВМ может вызвать ошибку гипервизора, отказ в работе системных устройств или захват используемых другими частями системы устройств.
Также некоторые устройства являются составными и не могут быть подключены к ВМ независимо.
Видеокарта может быть связана с аудиокодеком для HDMI. Некоторые сетевые карты могут быть 2/4/8-портовыми.
Составные устройства необходимо подключать к ВМ целиком.
При подключении к ВМ сетевых карт необходимо учитывать, что физическое устройство может быть занято для mgmt сети или для другого виртуального коммутатора.
Для подключения устройства PCI необходимо:
-
В окне управления PCI-устройствами нажать на кнопку
Подключить pci-устройство. -
В открывшемся окне выбрать устройство и контроллер из раскрывающегося списка.
-
Подтвердить операцию, нажав кнопку OK.
Добавление PCI-устройства
-
В CLI узла выполнить команду:
system pci set on ''
-
Перезагрузить узел.
-
Подключить PCI-устройство.
ВМ должна быть выключена.
Подключение видеокарты
-
Открыть терминал сервера с установленной видеокартой.
-
Выполнить команду CLI:
shell
-
Получить идентификаторы устройств видеокарты:
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])
-
Запомнить идентификатор видеокарты.
Например,
01:00
. -
Выполнить команду:
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)
-
Перейти из shell в CLI сервера:
exit
-
Отредактировать GRUB с помощью команды:
system cmdline edit
-
Указать в выводе команды следующие параметры:
-
Для видеокарт 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
.
-
-
Нажать клавишу Enter для сохранения изменений.
-
Выполнить команду:
system pci set on ''
-
Перезагрузить сервер.
-
Выбрать ВМ и перейти на вкладку PCI-устройства.
Внимание
Необходимые параметры ВМ:
-
Чипсет: q35.
-
Тип загрузки: UEFI.
-
ВМ выключена.
-
-
Нажать кнопку Подключить pci-устройство.
-
Выбрать необходимое устройство и нажать кнопку ОК.
Примечание
При необходимости использования видеокарты без виртуального графического адаптера на ВМ с ОС 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.