Als je Linux roept, dan roep je KVM. Althans, als het om virtualisatie gaat. Van Xen hoor je veel minder. Toch was Xen er eerder. Wat zijn eigenlijk de verschillen? Moet je KVM gebruiken of zijn er redenen om juist voor Xen te kiezen? Maakt het eigenlijk uit? In dit artikel nemen we deze twee virtualisatietechnieken onder de loep.

Dat KVM een stuk bekender is, is eerlijk gezegd niet zo verwonderlijk. KVM maakt namelijk al heel wat jaren deel uit van de standaard Linux kernel. Met je favoriete Linux distributie kun je dus al geruime tijd meteen aan de slag met KVM. De ontwikkeling van Xen daarentegen is altijd onafhankelijk van de Linux kernel gebleven. Zeker in het begin moest je daardoor veel zelf regelen om met Xen te werken. Inmiddels ondersteunt de Linux kernel weliswaar Xen, maar feit blijft dat nieuwe ontwikkelingen van Xen nog altijd achteraf in de kernel opgenomen moeten worden.

Hypervisor

De kern van virtualisatie is de hypervisor. Deze zorgt ervoor dat de virtuele machines een eigen omgeving krijgen waarbinnen ze onafhankelijk van elkaar draaien. Tussen Xen en KVM zit hier een belangrijk verschil. Bij Xen heb je een losse hypervisor, terwijl bij KVM de Linux kernel zelf tevens als hypervisor fungeert. KVM staat daarom voor “Kernel-based Virtual Machine.”

Als je een computer met Xen opstart, laad je eerst diens hypervisor in het geheugen. Daarna pas start het besturingssysteem. In het geval van KVM start je gewoon je Linux systeem op, zoals je gewend bent, en daarmee is de hypervisor meteen actief.

De hypervisor van Xen is dus geen Linux. Het is zelfs geen besturingssysteem waarop je kunt inloggen. Het is een stukje software met eigenlijk maar één functie: virtuele omgevingen maken en beheren voor de virtuele machines. Daarom moet je bij Xen zorgen dat de hypervisor weet welk besturingssysteem hij op zijn beurt moet opstarten. Dat regel je in de configuratie van de bootloader, zoals GRUB. Dat besturingssysteem is het host besturingssysteem. Bij Xen heet dat dom0, dat wil zeggen domain 0.

Bij KVM is het draaiende Linux systeem meteen je host besturingssysteem. De virtuele machines beheer je vanuit het host besturingssysteem. Verder dient het host besturingssysteem om drivers voor hardware te leveren. De virtuele machines heten de guest besturingssystemen.

Hardware

Wat hardware betreft heb je voor KVM een processor nodig met de zogeheten virtualisatie extensies. Dat heet hardware virtual machine (HVM) of ook wel hardware versnelling. Hiervoor kom je bij de processorfabrikanten de termen Intel VT en AMD-V tegen. Met die extensies ondersteunt de processor virtuele machines door ze van een geïsoleerde omgeving te voorzien. Voor de virtuele machines lijkt het daardoor alsof ze ieder hun eigen processor hebben.

Het grote voordeel van HVM is dat je het guest besturingssysteem niet hoeft aan te passen. Wat de kernel betreft, draait het systeem namelijk op een gewone hardware processor. Daardoor hoeft de hypervisor hiervoor ook bijna niets te regelen. De hardware van de processor zorgt immers voor gescheiden omgevingen. In de hedendaagse computers zijn deze virtualisatie extensies al heel wat jaren standaard. Daarom heb je op dat vlak geen enkel probleem om met KVM aan de slag te gaan.

Ook Xen maakt van die extensies gebruik om efficiënt zijn werk te doen. Anders dan KVM is Xen ook geschikt voor processors die geen HVM hebben. Je gebruikt in zulke gevallen de zogeheten paravirtualisatie-mogelijkheden van Xen. Hierbij communiceren de guest besturingssystemen met de hypervisor, zodat die de processor efficiënt kan benutten. Daaraan zie je dat de kernel van het guest besturingssysteem dus wel weet moet hebben van die hypervisor. Daarom werkt een standaard kernel niet en moet je die aanpassen. Voor Linux zitten die aanpassingen inmiddels standaard in de kernel.

Overigens is paravirtualisatie geen processor emulatie. Daarbij gebruik je software om een fysieke processor na te bootsen. Dat kost veel meer rekenkracht dan paravirtualisatie. Voordeel is wel weer dat je de kernel van het guest besturingssysteem juist niet hoeft aan te passen. Die ziet namelijk geen hypervisor en lijkt rechtstreeks met een processor te praten.

Besturingssysteem

Wat betreft de Xen hypervisor maakt het in beginsel niet uit welk besturingssysteem je als eerste opstart. Dat hoeft niet perse Linux te zijn. Je mag bijvoorbeeld ook FreeBSD of openSolaris als host besturingssysteem gebruiken. Dat moet overigens, net als bij Linux, wel ondersteuning voor Xen in zijn kernel hebben. Bij die ondersteuning gaat het bijvoorbeeld om de juiste drivers voor virtuele disks van de guests.

Bij KVM start je altijd meteen Linux op. Om een ander host besturingssysteem te gebruiken, moet dat KVM in zijn kernel hebben. Hoewel er voor FreeBSD wel pogingen gedaan zijn, kom je dat in de praktijk verder eigenlijk niet tegen.

Voor de guest besturingssystemen zijn de verschillen tussen Xen en KVM een stuk kleiner. Bij beide heb je ruime keuze. Niet alleen kun je moeiteloos Linux distributies gebruiken, ook leden van de BSD familie vormen geen probleem en zelfs met Microsoft Windows kun je goed uit te voeten. Let wel, dit laatste geldt alleen als je processor de bovengenoemde virtualisatie extensies heeft, maar dat is tegenwoordig altijd wel het geval.

Performance

Je zou denken dat Xen minder efficiënt is, doordat de hypervisor een los component is. Bij KVM communiceren de hypervisor en kernel daarentegen heel direct met elkaar. Toch blijkt dat in de praktijk niet zo eenvoudig te liggen. Volgens sommige benchmarks presteert KVM beter, terwijl je bij andere juist ziet dat Xen beter uit de bus komt. Hoe dan ook, de verschillen zijn klein.

Voor netwerk en disk I/O ondersteunen zowel Xen als KVM de hierboven al genoemde paravirtualisatie. Hier dient dat voor een verbeterde performance ten opzichte van geëmuleerde netwerkkaarten en dergelijke. Anders dan bij paravirtualisatie van een processor heb je hiervoor geen aangepaste kernel nodig. Je hebt wel device drivers nodig op de guests. Bij Linux komen die automatisch mee met de kernel, maar voor Windows bijvoorbeeld moet je ze zelf installeren.

Beheertools

Voor zowel Xen als KVM vind je de nodige applicaties. Het moet wel gezegd worde dat je bij KVM meer keuze hebt. Verder varieert de software in beide gevallen van tools op de commandline tot en met webapplicaties waarmee je centraal hele clusters van virtuele machines beheert. Voor het beheer van cloud-omgevingen maakt het ook niet uit of je Xen of KVM kiest. De veel gebruikte open source applicaties OpenStack en CloudStack ondersteunen namelijk beide hypervisors.

Verder is er het libvirt project dat zowel een interface voor Xen als KVM heeft. Dankzij dit project zijn er tools en applicaties beschikbaar waarmee je zowel Xen als KVM omgevingen beheert. Voor de commandoregel is virsh een bekende. Wil je een grafische interface, dan heb je bijvoorbeeld Virtual Machine Manager.

Tot slot

Als je met een Linux omgeving werkt, dan is KVM eigenlijk de meest logische keuze. Door je eigen distributie heb je al een hypervisor, waardoor je direct van start kunt. Aangezien het door de kernel ontwikkelaars zelf onderhouden wordt, is het bovendien een zekere keuze. Met Xen haal je meer flexibiliteit in huis, maar daardoor ook wat meer complexiteit.

 Links

KVM –linux-kvm.org

Xen -xenproject.org