Att ge ett grafikkort till en virtuell maskin: det verkliga hindret är inte drivrutinen utan gruppen
Att skicka hårdvara direkt till en maskin går, men enheter lämnas över i grupper, inte en och en. Och den överlämnade hårdvaran tar också ifrån maskinen friheten att flytta.
AtlasPVE ·
Den här artikeln svarar på
- proxmox gpu passthrough
- proxmox iommu-grupp
- proxmox pci passthrough fungerar inte
- proxmox grafikkort till vm
- proxmox skicka hårdvara vidare
Att ge ett fysiskt grafikkort, en diskstyrenhet eller ett infångningskort direkt till en virtuell maskin går. Löftet är äkta: maskinen använder den hårdvaran som om den vore dess egen.
Men det folk fastnar på är inte drivrutinen. Det är gruppen.
Enheter lämnas inte över en och en
Ditt moderkort avgör vilka enheter som kan skiljas från varandra och sorterar dem i grupper. Du kan inte lämna över en enda enhet ur en grupp; du lämnar över hela gruppen.
Följden: ligger grafikkortet i samma grupp som diskstyrenheten betyder att ge grafikkortet att också ge diskstyrenheten. Det går oftast inte, för där sitter tjänarens egen disk.
Frågan när du köper hårdvara är alltså inte "fungerar det här grafikkortet" utan "ligger det i en egen grupp på det här moderkortet". Grupperingen är en egenskap hos moderkortet, inte hos kortet. Samma kort skickas rent vidare på ett moderkort och inte alls på ett annat.
Enheten försvinner från tjänaren
Andra överraskningen: när du väl gett en enhet till en virtuell maskin kan tjänaren inte längre använda den. Det är inget lån, det är en överlåtelse.
Den vanligaste varianten: på en maskin med ett enda grafikkort ger du kortet till en virtuell maskin och tjänarens egen skärm följer med. Kan du ansluta på distans går det bra, men vid ett missöde har du inte längre möjligheten att koppla in tangentbord och skärm och titta.
Överlämnad hårdvara tar också friheten att flytta
För den som byggt ett kluster är detta den viktigaste punkten: en maskin med hårdvaruöverlämning kan oftast inte flytta till en annan nod.
Skälet är enkelt: kortet du lämnade över sitter i den här fysiska maskinen. Även om den andra noden har samma modell är det inte samma enhet.
Skyddsnätet som klustret ger dig täcker alltså inte den maskinen. Den kan inte flyttas under underhållsnätter och inte komma upp på en annan nod vid ett fel. När du ställer in hårdvaruöverlämning väljer du i själva verket detta: rörlighet, i utbyte mot prestanda och direkt hårdvaruåtkomst.
Minnet är inte heller längre rörligt
Det fjärde och minst kända villkoret: överlämnad hårdvara skriver direkt i den virtuella maskinens minne. För att det ska fungera måste minnet ligga kvar.
Men mekanismen som töjer minnet och tar tillbaka det är just den som flyttar runt minne. Är båda påslagna på samma maskin uppstår besvär på drivrutinssidan.
I praktiken lyder regeln: töj inte minnet på en maskin med hårdvaruöverlämning, ge den en fast mängd. Det betyder att den maskinen inte kan delta i leken "lova mer än du har" från förra artikeln. Minnet du lovade den är verkligen avsatt.
Beslutsmeningen
Hårdvaruöverlämning är ingen vinst, det är ett byte. Vad du vinner: verklig hårdvaruhastighet och tillgång till alla den hårdvarans förmågor. Vad du förlorar: flyttbarhet, tjänarens användning av enheten, och minnets rörlighet.
Gör du bytet medvetet är det rätt verktyg. Gjorde du det utan att märka det får du veta det första underhållsnatten eller vid första felet.
Vad Atlas gör
När Atlas läser tjänarens PCI-enheter läser den också vilken avskiljningsgrupp var och en ligger i. Innan du beslutar ser du alltså grupperingen: står enheten du vill lämna över ensam, eller ligger det något bredvid som du inte vill ge bort.
Det finns dessutom en regel som landar exakt på den sista delen av den här artikeln. Har en virtuell maskin hårdvaruöverlämning inställd och minnestöjning påslagen märker Atlas det som en varning: tillsammans ställer de till det på drivrutinssidan. Varningen säger inte bara "det finns ett problem", den säger vad som ska göras och tar dig direkt till minnesinställningen.
Detta är ett litet exempel på produktens allmänna hållning: inställningen i sig är giltig, ingenting ger fel, men två giltiga inställningar går inte ihop. Sådant ska sägas när man ställer in, inte under ett fel.
Källor
Proxmox egen dokumentation. På engelska, och den har sista ordet i den här frågan.