PCI Passthrough — проброс GPU и NIC в виртуальную машину | Глоссарий FREEHOSTING

PCI Passthrough

PCI Passthrough
PCI Passthrough — PCI Passthrough — механизм прямой передачи физического PCI/PCIe-устройства (GPU, NIC, NVMe) виртуальной машине с обходом гипервизора, обеспечивая нативную производительность без виртуализационных накладных расходов.

Определение простыми словами

PCI Passthrough (проброс PCI-устройств) позволяет виртуальной машине получить эксклюзивный прямой доступ к физическому оборудованию — видеокарте, сетевой карте или NVMe-диску — так, как если бы это была bare-metal машина. Гипервизор в этом случае выступает только посредником при инициализации, а не при каждой операции ввода-вывода.

Технология опирается на IOMMU (Intel VT-d или AMD-Vi), который изолирует DMA-транзакции устройства в пределах адресного пространства конкретной ВМ, и на драйвер VFIO в ядре Linux, отвязывающий устройство от хостового драйвера и передающий его в пространство пользователя. Без IOMMU проброс небезопасен: устройство получило бы доступ ко всей физической памяти хоста.

Сравнение

Метод Производительность Изоляция Гибкость
PCI Passthrough ~100% нативной Высокая (IOMMU) Низкая (1 ВМ)
SR-IOV 95–99% нативной Высокая (VF) Средняя (N ВМ)
VirtIO 70–90% нативной Программная Высокая (любые ВМ)

Кейсы использования

  • GPU-вычисления (ML/AI): передача NVIDIA A100 или RTX-серии в ВМ для обучения моделей без потерь пропускной способности PCIe.
  • Игровые и рендер-серверы: Windows-гость на KVM с проброшенной GPU для стриминга или рендеринга без потери FPS.
  • Высокочастотный трейдинг (HFT): проброс 25/100GbE NIC напрямую в ВМ с DPDK для обхода сетевого стека ядра Linux.
  • NVMe-диски с низкой латентностью: PCIe 4.0 NVMe пробрасывается в ВМ базы данных, исключая эмуляционный оверхед virtio-blk.
  • Аппаратные ускорители: FPGA, крипто-акселераторы (QAT), SmartNIC с offload-логикой.

Негативный пример: проброс единственного физического GPU на хосте с Proxmox VE одновременно нескольким ВМ невозможен — устройство занято эксклюзивно. Для многопользовательского доступа к GPU нужен SR-IOV (если карта поддерживает) или виртуализация MIG (NVIDIA A-серия).

Технические детали

Минимальные требования: CPU с поддержкой VT-d/AMD-Vi, включённый IOMMU в BIOS/UEFI и ядро Linux ≥ 4.1 с модулями vfio vfio_iommu_type1 vfio_pci vfio_virqfd. Проверка и настройка на хосте KVM/QEMU:

# Проверить активность IOMMU
dmesg | grep -e DMAR -e IOMMU

# Добавить параметры ядра (intel_iommu=on или amd_iommu=on)
grep GRUB_CMDLINE /etc/default/grub

# Загрузить модули VFIO
modprobe vfio-pci

# Узнать PCI ID устройства
lspci -nn | grep -i nvidia

# Привязать устройство к vfio-pci (пример для 10de:2204)
echo '10de 2204' > /sys/bus/pci/drivers/vfio-pci/new_id

# Запустить ВМ с проброшенным устройством через qemu
qemu-system-x86_64 -device vfio-pci,host=01:00.0,multifunction=on

В Proxmox VE проброс настраивается через GUI: Hardware → Add → PCI Device, либо вручную в конфиге /etc/pve/qemu-server/<VMID>.conf строкой hostpci0: 01:00,pcie=1,x-vga=1. Для стабильной работы рекомендуется закрепить IOMMU-группу целиком — все устройства одной группы должны быть проброшены вместе или изолированы через ACS override patch.

Частые вопросы

Можно ли использовать PCI Passthrough на обычном VPS?

Нет. Стандартный VPS работает внутри гипервизора хостера, и у него нет прямого доступа к физическому PCIe-слоту. PCI Passthrough требует выделенного сервера или специального bare-metal облака, где вам предоставляют физический хост целиком или конкретное устройство через SR-IOV.

Обязательно ли включать IOMMU для PCI Passthrough?

Да. Без IOMMU (Intel VT-d или AMD-Vi) устройство получает доступ ко всей физической памяти хоста через DMA, что создаёт критическую уязвимость. IOMMU изолирует адресное пространство устройства в рамках ВМ. Включается в настройках BIOS/UEFI и параметром ядра intel_iommu=on или amd_iommu=on.

В чём разница между PCI Passthrough и SR-IOV?

PCI Passthrough передаёт физическое устройство одной ВМ эксклюзивно — максимальная производительность, но нет возможности разделить между несколькими гостями. SR-IOV создаёт несколько виртуальных функций (VF) одного физического устройства, позволяя подключить его к N ВМ одновременно с минимальными потерями производительности. SR-IOV требует аппаратной поддержки со стороны самого устройства.

Какие GPU поддерживают PCI Passthrough без ограничений?

Большинство серверных GPU (NVIDIA A-серия, AMD Instinct) работают без ограничений. Потребительские карты NVIDIA до 2022 года имели код 43 (Error 43) в Windows-гостях — это программное ограничение, обходимое через патч hide_hypervisor в QEMU. С видеокартами RTX 3000/4000 ситуация улучшилась, но рекомендуется проверять совместимость конкретной модели.