Å gi et skjermkort til en virtuell maskin: den virkelige hindringen er ikke driveren, men gruppen
Å gi maskinvare direkte til en maskin går an, men enheter overleveres i grupper, ikke én og én. Og den overleverte maskinvaren tar også fra maskinen friheten til å flytte.
AtlasPVE ·
Denne artikkelen svarer på
- proxmox gpu passthrough
- proxmox iommu-gruppe
- proxmox pci passthrough virker ikke
- proxmox skjermkort til vm
- proxmox maskinvaregjennomgang
Å gi et fysisk skjermkort, en diskstyrer eller et opptakskort direkte til en virtuell maskin går an. Løftet er ekte: maskinen bruker den maskinvaren som om den var dens egen.
Men det folk står fast på, er ikke driveren. Det er gruppen.
Enheter overleveres ikke én og én
Hovedkortet ditt avgjør hvilke enheter som kan skilles fra hverandre, og sorterer dem i grupper. Du kan ikke overlevere én enkelt enhet fra en gruppe; du overleverer hele gruppen.
Følgen: ligger skjermkortet i samme gruppe som diskstyreren, betyr det å gi skjermkortet også å gi diskstyreren. Det går som regel ikke, for der sitter tjenerens egen disk.
Spørsmålet når du kjøper maskinvare er derfor ikke "virker dette skjermkortet", men "ligger det i sin egen gruppe på dette hovedkortet". Grupperingen er en egenskap ved hovedkortet, ikke ved kortet. Det samme kortet går rent gjennom på ett hovedkort og slett ikke på et annet.
Enheten forsvinner fra tjeneren
Den andre overraskelsen: når du først har gitt en enhet til en virtuell maskin, kan tjeneren ikke lenger bruke den. Det er ikke et lån, det er en overdragelse.
Den vanligste varianten: på en maskin med ett eneste skjermkort gir du kortet til en virtuell maskin, og tjenerens egen skjerm følger med. Kan du koble til eksternt, går det bra, men ved et uhell har du ikke lenger muligheten til å koble til tastatur og skjerm og se etter.
Overlevert maskinvare tar også friheten til å flytte
For den som har bygd en klynge, er dette det viktigste punktet: en maskin med maskinvaregjennomgang kan som regel ikke flytte til en annen node.
Grunnen er enkel: kortet du overleverte, sitter i denne fysiske maskinen. Selv om den andre noden har samme modell, er det ikke samme enhet.
Sikkerhetsnettet klyngen gir deg, dekker altså ikke den maskinen. Den kan ikke flyttes på vedlikeholdsnetter og ikke komme opp på en annen node ved feil. Når du setter opp maskinvaregjennomgang, velger du i virkeligheten dette: bevegelighet, i bytte mot ytelse og direkte maskinvaretilgang.
Minnet er heller ikke lenger bevegelig
Den fjerde og minst kjente begrensningen: overlevert maskinvare skriver rett inn i minnet til den virtuelle maskinen. For at det skal virke, må minnet bli liggende.
Men mekanismen som strekker minnet og tar det tilbake, er nettopp den som flytter minne rundt. Er begge påslått på samme maskin, oppstår det trøbbel på driversiden.
I praksis lyder regelen: ikke strekk minnet på en maskin med maskinvaregjennomgang, gi den en fast mengde. Det betyr at den maskinen ikke kan være med på leken "love mer enn du har" fra forrige artikkel. Minnet du lovte den, er virkelig satt av.
Beslutningssetningen
Maskinvaregjennomgang er ingen gevinst, det er et bytte. Det du vinner: virkelig maskinvarehastighet og tilgang til alle evnene til den maskinvaren. Det du taper: flyttbarhet, tjenerens bruk av enheten, og minnets bevegelighet.
Gjør du byttet bevisst, er det rett verktøy. Gjorde du det uten å merke det, får du vite det første vedlikeholdsnatt eller ved første feil.
Hva Atlas gjør
Når Atlas leser PCI-enhetene på tjeneren, leser det også hvilken skillegruppe hver av dem ligger i. Før du bestemmer deg, ser du altså grupperingen: står enheten du vil overlevere alene, eller ligger det noe ved siden av som du ikke vil gi bort.
Det finnes dessuten en regel som treffer nøyaktig den siste delen av denne artikkelen. Har en virtuell maskin maskinvaregjennomgang satt opp og minnestrekking påslått, merker Atlas det som en advarsel: sammen lager de trøbbel på driversiden. Advarselen sier ikke bare "det er et problem", den sier hva som skal gjøres, og tar deg rett til minneinnstillingen.
Dette er et lite eksempel på produktets generelle holdning: oppsettet i seg selv er gyldig, ingenting gir feil, men to gyldige innstillinger gir ingen mening sammen. Slikt hører hjemme når man setter opp, ikke under en feil.
Kilder
Proxmox sin egen dokumentasjon. På engelsk, og den har siste ord i denne saken.