PCI Passthrough – bezpośredni dostęp VM do fizycznego urządzenia
Wirtualizacja

PCI Passthrough – bezpośredni dostęp VM do fizycznego urządzenia

PCI Passthrough – bezpośredni dostęp VM do fizycznego urządzenia

PCI Passthrough to technika wirtualizacji, która pozwala przypisać fizyczne urządzenie PCIe — np. kartę graficzną, kartę sieciową, kontroler HBA czy NVMe — bezpośrednio do maszyny wirtualnej.

Zamiast:

VM
 |
 v
Virtual Device
 |
 v
Hypervisor
 |
 v
Physical Device

otrzymujemy:

VM
 |
 v
Virtual PCI Device
 |
 v
Physical PCIe Device

To daje VM znacznie bardziej bezpośredni dostęp do sprzętu.


PCI Passthrough a emulacja

Klasyczna VM może korzystać z emulowanego urządzenia:

                Physical NIC
                     |
                     v
                 Hypervisor
                     |
                Virtual NIC
                     |
                     v
                    VM

W przypadku passthrough:

                 Physical NIC
                      |
                      |
                      v
                     VM

Hypervisor nadal kontroluje izolację, ale dane mogą omijać dużą część klasycznej warstwy emulacji.


VFIO – kluczowa technologia w Linuxie

W środowisku KVM najważniejszym elementem PCI Passthrough jest VFIO (Virtual Function I/O).

Schemat:

Physical PCIe Device
          |
          v
        VFIO
          |
          v
        QEMU
          |
          v
      KVM Virtual Machine

VFIO pozwala bezpiecznie udostępnić urządzenie przestrzeni użytkownika, w szczególności procesowi QEMU obsługującemu VM.


IOMMU

Drugim kluczowym elementem jest IOMMU.

Na platformach Intel spotkasz:

Intel VT-d

a na AMD:

AMD IOMMU

IOMMU kontroluje mapowanie dostępu urządzenia do pamięci.

Schemat:

                PCIe Device
                     |
                     v
                   IOMMU
                     |
                     v
                    VFIO
                     |
                     v
                     VM

To bardzo ważne z punktu widzenia bezpieczeństwa.


Dlaczego IOMMU jest potrzebne?

Załóżmy, że urządzenie PCIe wykonuje DMA — Direct Memory Access.

Bez odpowiedniej izolacji urządzenie mogłoby mieć dostęp do niepożądanych obszarów pamięci.

IOMMU pozwala ograniczyć:

PCI Device
     |
     X ---> Host Memory

i zezwolić tylko na:

PCI Device
     |
     v
Allowed Memory Region
     |
     v
VM

Najpopularniejsze zastosowanie – GPU Passthrough

Jednym z najbardziej znanych zastosowań PCI Passthrough jest przekazanie GPU do VM.

Physical GPU
     |
     v
IOMMU
     |
     v
VFIO
     |
     v
QEMU
     |
     v
Windows VM

VM może wtedy korzystać z fizycznej karty graficznej.

Przykładowo:

Linux Host
     |
     +---- VM 1
     |       |
     |      GPU
     |
     +---- inne VM

GPU jest przypisane do jednej konkretnej VM.


GPU Passthrough – po co?

Może być przydatne do:

  • wymagających aplikacji graficznych,
  • workstation VM,
  • renderingu,
  • AI/ML,
  • CUDA,
  • obliczeń GPU,
  • testowania sterowników.

Przykład:

Linux Host
     |
     +-- KVM
           |
         Windows VM
           |
         NVIDIA GPU

PCI Passthrough karty sieciowej

Można również przekazać fizyczną kartę sieciową.

Physical NIC
     |
     v
VFIO
     |
     v
VM

VM otrzymuje praktycznie bezpośredni dostęp do urządzenia.

To może być interesujące dla:

  • firewalli,
  • routerów,
  • IDS/IPS,
  • NFV,
  • aplikacji wymagających bardzo niskich opóźnień.

PCI Passthrough vs SR-IOV

Te technologie są podobne, ale nie są tym samym.

PCI Passthrough

Przekazujesz fizyczną funkcję urządzenia:

NIC
 |
 v
VM

SR-IOV

Jedno urządzenie tworzy wiele funkcji:

NIC
 |
 +-- VF1 → VM1
 |
 +-- VF2 → VM2
 |
 +-- VF3 → VM3

Czyli:

PCI Passthrough
→ całe urządzenie/funkcja dla jednej VM

SR-IOV
→ wiele Virtual Functions dla wielu VM

PCI Passthrough vs VirtIO

To również bardzo ważne porównanie.

VirtIO

VM
 |
 v
virtio-net
 |
 v
QEMU / Host
 |
 v
NIC

PCI Passthrough

VM
 |
 v
Physical NIC
Cecha VirtIO PCI Passthrough
Wydajność wysoka bardzo wysoka
Elastyczność bardzo wysoka niższa
Migracja VM łatwiejsza trudniejsza
Wymaga konkretnego sprzętu
Virtual switch zasadniczo omijany dla tego urządzenia
Dostęp do urządzenia pośredni bezpośredni

PCI Passthrough w KVM/QEMU

Typowa architektura wygląda tak:

                    Linux Host
                        |
                 +------+------+
                 |             |
                KVM          VFIO
                 |             |
                 |       PCIe Device
                 |             |
                 +------+------+
                        |
                       QEMU
                        |
                        v
                       VM

KVM zajmuje się wirtualizacją CPU, QEMU obsługą VM i urządzeń, a VFIO przekazuje fizyczne urządzenie.


IOMMU Groups

W Linuxie bardzo ważnym pojęciem są IOMMU groups.

Urządzenia PCIe są grupowane według możliwości ich izolacji przez IOMMU.

Można sprawdzić grupy:

for g in /sys/kernel/iommu_groups/*; do
    echo "IOMMU Group ${g##*/}"
    for d in "$g"/devices/*; do
        echo -e "\t$(lspci -nns "${d##*/}")"
    done
done

Przykładowo:

IOMMU Group 10
    01:00.0 VGA compatible controller

IOMMU Group 11
    02:00.0 Ethernet controller

Jeżeli GPU i inne urządzenia znajdują się w tej samej grupie, może to skomplikować bezpieczny passthrough.


lspci

Pierwszym krokiem jest znalezienie urządzenia:

lspci

Przykład:

01:00.0 VGA compatible controller
02:00.0 Ethernet controller

Szczegóły:

lspci -nnk

Możemy zobaczyć m.in.:

Kernel driver in use:
Kernel modules:

VFIO i sterownik urządzenia

Normalnie urządzenie może być obsługiwane przez sterownik hosta:

GPU
 |
 v
nvidia / amdgpu

lub:

NIC
 |
 v
ixgbe / i40e / mlx5

Przy passthrough chcemy, żeby urządzenie było obsługiwane przez:

vfio-pci

Schemat:

PCI Device
    |
    v
vfio-pci
    |
    v
QEMU
    |
    v
VM

Przykład konfiguracji VFIO

Po znalezieniu identyfikatora:

lspci -nn

możemy zobaczyć np.:

01:00.0 VGA compatible controller [0300]: ...
        [10de:xxxx]

Identyfikator PCI:

10de:xxxx

może zostać wykorzystany do przypisania urządzenia do vfio-pci.

Dokładna konfiguracja zależy od dystrybucji, kernela, sprzętu i urządzenia.


GPU i urządzenie audio

W przypadku GPU często trzeba pamiętać, że karta może mieć więcej niż jedną funkcję PCIe.

Przykładowo:

01:00.0 VGA controller
01:00.1 Audio controller

Jeżeli przekazujesz GPU do VM, często przekazuje się obie funkcje:

GPU
 |
 +-- 01:00.0 → GPU
 |
 +-- 01:00.1 → HDMI/DP Audio

Dzięki temu system gościa widzi pełniejszy model urządzenia.


Reset urządzenia

Jednym z problemów PCI Passthrough może być reset urządzenia.

Przykładowy scenariusz:

VM starts
   |
   v
GPU assigned
   |
   v
VM stops
   |
   v
GPU reset?

Niektóre urządzenia prawidłowo obsługują reset, a inne mogą wymagać dodatkowych mechanizmów lub mieć ograniczenia firmware/sterownika.

Dlatego kompatybilność konkretnego urządzenia ma ogromne znaczenie.


Live Migration

To jedna z największych wad passthrough.

Standardowa VM:

Host A
  |
 VM
  |
  | Live Migration
  v
Host B

jest stosunkowo łatwa do przeniesienia.

VM z fizycznym GPU:

Host A
 |
GPU
 |
VM
 |
 | Migration ?
 v
Host B
 |
GPU ?

Drugi host musi posiadać odpowiedni sprzęt i zgodną konfigurację.

Dlatego klasyczny PCI Passthrough często ogranicza możliwości live migration.


High Availability

Podobny problem pojawia się z HA.

Jeżeli VM wymaga konkretnego urządzenia:

VM
 |
GPU
 |
Host A

to automatyczne przeniesienie VM na:

Host B

ma sens tylko wtedy, gdy Host B również posiada kompatybilne urządzenie.

 

PCI Passthrough – bezpośredni dostęp VM do fizycznego urządzenia
PCI Passthrough – bezpośredni dostęp VM do fizycznego urządzenia

Bezpieczeństwo

PCI Passthrough zapewnia silną separację, ale jednocześnie przekazujesz VM dostęp do prawdziwego urządzenia.

Dlatego trzeba brać pod uwagę:

VM
 |
 v
VFIO
 |
 v
Physical Device
 |
 v
IOMMU
 |
 v
Host

Potencjalne problemy mogą wynikać z:

  • błędów firmware,
  • sterowników,
  • urządzeń PCIe,
  • IOMMU,
  • hypervisora,
  • błędów w obsłudze DMA.

PCI Passthrough w Proxmox

W Proxmox VE PCI Passthrough jest często wykorzystywany do przekazywania:

GPU
NIC
HBA
USB controller
NVMe

Schemat:

Proxmox VE
     |
    KVM
     |
   QEMU
     |
   VFIO
     |
PCIe Device
     |
     v
    VM

Można to konfigurować przez GUI lub CLI.


PCI Passthrough w Hyper-V

Hyper-V ma własną implementację przekazywania urządzeń PCIe, określaną jako Discrete Device Assignment (DDA).

Schemat:

Hyper-V
   |
   v
DDA
   |
   v
Physical PCIe Device
   |
   v
VM

Koncepcja jest podobna do PCI Passthrough w KVM, ale mechanizmy Microsoftu są inne.


DDA vs SR-IOV

W ekosystemie Hyper-V warto rozróżnić:

DDA
→ przekazanie fizycznego urządzenia do VM

oraz:

SR-IOV
→ podział urządzenia na Virtual Functions

Czyli:

DDA:

NIC/GPU
   |
   v
 VM


SR-IOV:

NIC
 |
 +-- VF1 → VM1
 +-- VF2 → VM2
 +-- VF3 → VM3

PCI Passthrough i storage

Można również przekazać kontroler storage.

Przykład:

Physical HBA
     |
     v
VFIO
     |
     v
Storage VM

Jest to interesujące np. przy systemach storage, które chcą bezpośrednio zarządzać urządzeniami dyskowymi.


PCI Passthrough a NVMe

Możliwe jest również przekazanie kontrolera NVMe:

NVMe Controller
       |
       v
     VFIO
       |
       v
      VM

VM może wtedy korzystać z urządzenia bardzo bezpośrednio.

Trzeba jednak dokładnie przemyśleć:

  • backup,
  • migrację,
  • awarie,
  • dostępność urządzenia,
  • IOMMU isolation.

Kiedy warto używać PCI Passthrough?

Najbardziej sensowne przypadki to:

✔ GPU workloads
✔ AI / ML
✔ bardzo szybkie NIC
✔ specjalistyczne urządzenia PCIe
✔ storage appliances
✔ NFV
✔ wymagające aplikacje

Kiedy lepiej go nie używać?

Jeżeli najważniejsze są:

✔ live migration
✔ HA
✔ elastyczne przenoszenie VM
✔ łatwy backup
✔ niezależność od konkretnego sprzętu

często lepszym wyborem będzie:

VirtIO

lub:

SR-IOV

w zależności od zastosowania.


PCI Passthrough – pełna architektura

                         PHYSICAL SERVER
                                |
                         PCIe Device
                                |
                                v
                              IOMMU
                                |
                                v
                              VFIO
                                |
                                v
                              QEMU
                                |
                                v
                         KVM Virtual Machine
                                |
                    +-----------+-----------+
                    |                       |
                 Guest OS                Driver
                    |                       |
                    +-----------+-----------+
                                |
                         Physical Device

PCI Passthrough vs SR-IOV vs VirtIO

Technologia Model Wydajność Elastyczność Live Migration
VirtIO urządzenie parawirtualne ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
SR-IOV Virtual Function ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐
PCI Passthrough fizyczne urządzenie ⭐⭐⭐⭐⭐ ⭐⭐

To oczywiście uproszczenie — rzeczywiste możliwości zależą od hypervisora, sprzętu i konkretnej konfiguracji.


Najważniejsze do zapamiętania

PCI Passthrough
        |
        v
fizyczne urządzenie PCIe
        |
        v
      VFIO
        |
        v
      IOMMU
        |
        v
        VM

PCI Passthrough daje VM bardzo bezpośredni dostęp do fizycznego urządzenia i dlatego świetnie nadaje się do GPU, szybkich kart sieciowych, kontrolerów storage czy specjalistycznego sprzętu. Ceną za wysoką wydajność jest jednak mniejsza elastyczność — szczególnie w zakresie live migration, HA i niezależności VM od konkretnego hosta.

Polecane wpisy
Citrix Hypervisor (XenServer): Charakterystyka i Zastosowania
Citrix Hypervisor (XenServer): Charakterystyka i Zastosowania

Citrix Hypervisor (XenServer): Charakterystyka i Zastosowania Citrix Hypervisor, wcześniej znany jako XenServer, to zaawansowana platforma wirtualizacyjna oparta na technologii Xen, Czytaj dalej

Jak sprawdzić konfigurację sieci wirtualnej (przełączniki, adresy IP)?
Jak sprawdzić konfigurację sieci wirtualnej (przełączniki, adresy IP)?

🌐 Jak sprawdzić konfigurację sieci wirtualnej (przełączniki, adresy IP)? W dobie wirtualizacji, nie tylko maszyny, ale i całe sieci są Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.