⚙️ Jak naprawić problemy z działaniem funkcji passthrough urządzeń PCI?
📌 Wprowadzenie
Wirtualizacja umożliwia uruchamianie wielu maszyn wirtualnych (VM) na jednym fizycznym serwerze. Aby zwiększyć wydajność i umożliwić bezpośredni dostęp do fizycznych zasobów, używa się funkcji PCI passthrough. Pozwala ona przypisać fizyczne urządzenie (np. GPU, karta sieciowa, kontroler dysku) bezpośrednio do konkretnej maszyny wirtualnej.
Choć bardzo użyteczna, funkcja ta bywa problematyczna w konfiguracji i obsłudze. W tym artykule pokażemy, jak diagnozować i naprawiać najczęstsze problemy z passthrough PCI w środowisku opartym na wirtualizacji.

🔍 Co to jest PCI passthrough?
PCI passthrough to mechanizm umożliwiający przypisanie fizycznego urządzenia PCI/PCIe bezpośrednio do VM, z pominięciem hypervisora.
🔗 Schemat działania:
[ Urządzenie PCI (np. GPU) ]
│
▼
[ Hypervisor (np. Proxmox, ESXi, KVM) ] ──> [ VM (gość) ]
│
└── passthrough
✅ Zastosowanie:
- GPU do obliczeń CUDA
- Karty sieciowe SR-IOV
- Kontrolery USB, RAID itp.
🚨 Najczęstsze problemy z passthrough PCI
❌ 1. Brak obsługi VT-d/IOMMU w BIOS/UEFI
- Funkcja nieaktywna lub nieobsługiwana przez CPU/płytę główną.
❌ 2. Urządzenie nieprzypisane do osobnego IOMMU group
- Konflikt z innymi urządzeniami – nie można go bezpiecznie przekazać.
❌ 3. Błąd w konfiguracji GRUB/bootloadera
- Brak parametru
intel_iommu=on
lubamd_iommu=on
.
❌ 4. Urządzenie jest używane przez hosta
- Host system nie „oddał” urządzenia – np. GPU używane przez konsolę.
❌ 5. Brak sterowników w systemie gościa
- VM nie rozpoznaje przekazanego urządzenia – brak widoczności.
🛠️ Jak naprawić problemy z PCI passthrough – krok po kroku
✅ Krok 1: Włącz IOMMU w BIOS/UEFI
📌 W zależności od producenta płyty głównej:
- Intel: Włącz
VT-d
- AMD: Włącz
SVM
orazIOMMU
🔧 Zazwyczaj dostępne w zakładce „Advanced” → „CPU Features” lub „Northbridge”.
✅ Krok 2: Skonfiguruj parametry jądra
Dla Debiana/Proxmox/KVM edytuj plik GRUB:
nano /etc/default/grub
Dodaj do linii:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# lub dla AMD:
# GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
Zastosuj zmiany:
update-grub
reboot
✅ Krok 3: Zidentyfikuj grupy IOMMU
📋 Sprawdź, czy urządzenie jest w oddzielnej grupie:
find /sys/kernel/iommu_groups/ -type l
Jeśli urządzenie dzieli grupę z innymi – nie można go bezpiecznie przekazać.
💡 Rozwiązanie: użyj opcji ACS override (niezalecane w środowisku produkcyjnym).
✅ Krok 4: Odłącz urządzenie od hosta
Dodaj urządzenie do vfio-pci
, aby host go nie używał:
Sprawdź identyfikator:
lspci -nn
Przykład GPU:
01:00.0 VGA compatible controller [0300]: NVIDIA [10de:1b80]
Dodaj do pliku:
echo "10de 1b80" > /etc/modprobe.d/vfio.conf
Następnie:
update-initramfs -u
reboot
✅ Krok 5: Przypisz urządzenie do VM
W Proxmox:
qm set 100 -hostpci0 01:00.0
W libvirt/KVM – w pliku XML dodaj:
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</hostdev>
✅ Krok 6: Sprawdź VM i zainstaluj sterowniki
🔍 Uruchom VM i sprawdź w systemie gościa (lspci
, Device Manager
) czy urządzenie jest widoczne.
📦 Zainstaluj odpowiednie sterowniki (np. NVIDIA, Intel, Mellanox).
🧠 Najczęstsze pułapki i rozwiązania
Problem | Rozwiązanie |
---|---|
Host „widzi” GPU mimo vfio-pci | Wyłącz nouveau /radeon , zaktualizuj initramfs |
VM nie widzi urządzenia | Zła grupa IOMMU lub brak vfio-pci |
Urządzenie „zawiesza” hosta | Sprawdź wsparcie ACS, firmware BIOS |
System gościa nie uruchamia się z GPU | Ustaw primary GPU jako inne urządzenie w BIOS |
📈 Korzyści z poprawnie działającego passthrough
- Pełna wydajność fizycznego sprzętu w VM
- Dostęp do specjalistycznych funkcji (np. CUDA, SR-IOV)
- Możliwość uruchamiania VM z GUI, gier, renderingu lub testowania sterowników
🏁 Podsumowanie
Funkcja PCI passthrough w środowiskach opartych na wirtualizacji wymaga odpowiedniego wsparcia sprzętowego, konfiguracji systemu oraz znajomości architektury IOMMU. Najczęstsze problemy wynikają z błędów w BIOS, jądra systemu lub przypisania urządzeń w grupach IOMMU.
Dzięki szczegółowej diagnozie i konfiguracji możesz skutecznie przypisać fizyczne urządzenia do maszyn wirtualnych, uzyskując pełną funkcjonalność bez rezygnacji z elastyczności, jaką daje wirtualizacja.