PCI passthrough este una dintre funcțiile care fac KVM atractiv pentru utilizatorii avansați de Linux: poți oferi unei mașini virtuale acces direct la o placă video, un controller USB, o placă de rețea sau alt dispozitiv PCIe. Performanța poate fi foarte apropiată de cea nativă, dar avantajul vine cu o condiție importantă: dispozitivul pasat către guest trebuie izolat corect de restul sistemului.
Aici intră în discuție VFIO și IOMMU Groups. Dacă sunt tratate superficial, ele pot transforma o configurație performantă într-una fragilă, în care hostul și mașina virtuală împart mai mult decât ar trebui.
Ce rol are IOMMU
IOMMU este mecanismul care limitează accesul dispozitivelor la memorie. Documentația kernelului Linux explică faptul că DMA este partea critică pentru securitate: un dispozitiv cu acces direct la memorie poate citi sau scrie zone sensibile dacă nu este controlat. IOMMU ajută la izolarea dispozitivelor între ele și față de memoria arbitrară a sistemului.
În practică, izolarea nu este întotdeauna la nivel de dispozitiv individual. Topologia plăcii de bază, bridge-urile PCIe, funcțiile multiple ale aceluiași dispozitiv și suportul ACS pot reduce granularitatea. De aceea apar IOMMU Groups: un grup reprezintă setul minim de dispozitive care poate fi izolat de restul sistemului.
Regula importantă este simplă: pentru passthrough sigur, nu te uiți doar la dispozitivul dorit, ci la întregul lui IOMMU Group.
De ce contează grupul, nu doar placa video
O placă video PCIe, de exemplu, apare frecvent împreună cu funcția ei audio HDMI. Asta este normal și, de obicei, ambele funcții se pasează împreună către VM. Problema apare când în același grup se află și alte dispozitive pe care hostul trebuie să le păstreze: controller SATA, controller USB folosit de sistem, placă de rețea sau alte componente critice.
VFIO folosește grupurile ca unitate de ownership. Cu alte cuvinte, dacă un dispozitiv din grup este cedat către userspace pentru passthrough, trebuie să te asiguri că toate dispozitivele relevante din acel grup sunt tratate coerent. Altfel, riști să amesteci responsabilitățile între host și guest.
Cum verifici grupurile în siguranță
Primul pas este să activezi suportul IOMMU în firmware, acolo unde placa de bază îl expune. Pe platformele Intel, opțiunea apare de obicei ca VT-d; pe AMD, ca AMD-Vi sau IOMMU. Unele distribuții cer și parametri de kernel, iar documentația distribuției trebuie verificată pentru cazul concret.
După pornire, grupurile pot fi inspectate din /sys/kernel/iommu_groups/. Arch Wiki oferă un exemplu de script care listează grupurile și dispozitivele PCI din fiecare grup, folosind informațiile din sysfs și lspci. Scopul nu este să copiezi orbește o rețetă, ci să vezi clar dacă dispozitivul pe care vrei să îl pasezi este singur sau împreună cu funcții acceptabile.
Un rezultat bun arată grupuri separate pentru dispozitivele pe care vrei să le controlezi independent. Un rezultat problematic arată mai multe componente neînrudite în același grup.
ACS override: soluție rapidă, dar nu izolare reală
În multe ghiduri apare ACS override, un patch sau parametru folosit pentru a „sparge” grupurile IOMMU afișate de sistem. El poate face configurația să pară mai flexibilă, dar nu garantează că hardware-ul oferă izolarea fizică necesară. Dacă bridge-ul PCIe nu forțează traficul prin IOMMU, împărțirea artificială a grupurilor poate da o falsă impresie de siguranță.
Pentru un sistem de test poate fi acceptabil, cu riscurile înțelese. Pentru un workstation de producție, server, laborator cu date sensibile sau mediu multi-user, varianta prudentă este să schimbi slotul PCIe, să folosești altă placă de bază sau să alegi hardware cu izolare mai bună.
Bune practici pentru KVM și libvirt
Înainte de passthrough, actualizează firmware-ul plăcii de bază, verifică manualul pentru distribuția liniilor PCIe și păstrează o metodă separată de acces la host: grafică integrată, a doua placă video sau acces remote sigur. Nu pasa către guest singurul controller USB de care depinde tastatura hostului, dacă nu ai plan de recuperare.
În libvirt, passthrough-ul se configurează prin dispozitive hostdev, iar QEMU/KVM se ocupă de expunerea lor către guest. Pentru stabilitate, dispozitivele dedicate, cum ar fi GPU-ul și funcția audio asociată, trebuie legate de vfio-pci înainte ca driverul hostului să le ocupe. Pentru dispozitive USB sau plăci secundare, atașarea dinamică poate fi posibilă, dar trebuie testată cu atenție.
PCI passthrough nu este doar o bifă de performanță. Este o decizie de arhitectură. Dacă IOMMU Groups arată curat, VFIO este configurat coerent și hostul rămâne separat de guest, KVM poate oferi o experiență puternică și sigură. Dacă grupurile sunt forțate doar ca să „meargă”, câștigul de performanță poate veni cu un cost invizibil: pierderea izolării pe care virtualizarea ar trebui să o protejeze.

















































