KVM o Xen?
Ultimamente ho sentito che molti sono indecisi se scegliere Xen oppure KVM (kernel-based virtual machine) come software di virtualizzazione. Dunque ho pensato di fare una riflessione e un test su questo dilemma. Innanzitutto è opportuno fare una lista delle caratteristiche dei due prodotti e cercare i pregi e i difetti delle varie soluzioni.
Xen offre la paravirtualizzazione che consente di eseguire un sistema operativo con un kernel modificato con eccellenti prestazioni mentre KVM ha il suo punto di forza nell’utilizzare le istruzioni native per la virtualizzazione (VT-X, AMD-V) contenute all’interno dei processori di ultima generazione.
Per adoperare KVM è necessario un computer con un processore compatibile mentre per adoperare Xen e la paravirtualizzazione bisogna usare un sistema operativo modificato.
Qualora il sistema operativo che si vuole installare sulla macchina virtuale non contenesse le librerie e parti del kernel compatibili con Xen, la virtualizzazione è possibile usando la funzionalità HVM. HVM utilizza parte del codice di QEMU e KVM (il riutilizzo del codice è una caratteristica del modello di sviluppo open source). Purtroppo a parte le distribuzioni GNU/Linux e il loro kernel, molti altri sistemi operativi non sono preparati per Xen (FreeBSD, OpenSolaris, Windows vari…)
D’altro canto KVM virtualizza completamente molti sistemi operativi tra cui le distribuzioni GNU/Linux, *BSD, Windows, Solaris.
Il test è stato condotto attivando tre macchine virtuali contemporaneamente: una virtual machine basata su Ubuntu 8.04 esegue tutti i test di mysql benchmark (512 MB di RAM), le altre due linux portano a termine gli nbeanch (256 MB di RAM ciascuna). Il tutto su un DELL Inspiron 6400, processore Intel Core Duo T2400 a 1,83 GHz, cache di secondo livello 2048 KB, 2 GB RAM su OpenSuse 10.3 kernel 2.6.22.17-0.1.i586 default SMP, KVM versione 63, Xen 3.2 su kernel Linux 2.6.22.17-0.1-xen.
KVM affida la gestione della CPU e delle altre risorse al kernel linux del sistema operativo ospitante.
Il test ha evidenziato come l’esecuzione di tre macchine virtuali, a pieno carico di lavor su soli due core, penalizzi fortemente le prestazioni degli ambienti virtuali.
I cicli dei processori vengono suddivisi in modo non equo tra le virtual machine. Una virtual machine ottiene un’intera cpu mentre le altre due si suddividono circa il 50% dell’altro processore. Naturalmente la gestione è dovuta allo scheduler di Linux.
Come il carico di lavoro di una virtual machine cala, un’altra VM si appropria dei cicli “liberi”.
Xen, a differenza del kernel Linux per KVM, distribuisce le risorse del calcolatore in modo più omogeneo arrivando, in caso di elevato carico su tutte i tre domU, circa attorno al 60%. Il restante è attribuito al dom0.
La virtual machine di KVM che esegue i benchmark di MySQL ottiene performance del 5% in rispetto a HVM mentre per le altre due (quelle che eseguono nbench) la situazione è contraria.
La somma dello scarto fra le due macchine virtuali è altamente favorevole a HVM; il quale guadagna circa il 13%.
Dai test si evince che Xen con HVM amministra più equamente tutti i domini non privilegiati (domU) le sue prestazioni sono del 6% migliori rispetto a KVM.
Sono assolutamente disponibile per chiarimenti!
12 pensieri riguardo “KVM o Xen?”
I commenti sono chiusi.
Ecco, era una cosa che mi ero chiesto, grazie per la risposta. E complimenti per il blog, post sempre molto interessanti. 🙂
Ciao ciao!
@:\>
Grazie 🙂
Torno a sottolineare che le prestazioni di KVM sono condizionate _fortemente_ dal kernel del sistema operativo ospitante.
complimenti per la chiarezza espositiva e ti ringrazio di aver chiarito aspetti a me poco chiari. Non ho mai provato Xen e questo mi spinge a iniziare a farlo. Grazie, Antonio
Grazie per i complimenti. Quest’articolo è uno dei migliori che ho scritto e mi ha preso un sacco di tempo tra fallimenti e successi 🙂
Bell’articolo, vorrei solo correggere alcune informazioni. Solaris (Open o meno) non puo’ non avere il kernel preparato per Xen… Sun e’ coinvolta direttamente nel supporto a Xen (facendone una sua “versione” chiamata xVM). Ho appena finito di installare un server Xen (Dom0 Ubuntu Hardy) in cui Solaris 11 SXCE sta girando paravirtualizzato tranquillamente e con un carico sulla cpu nettamente inferiore a quello delle altre due vm ubuntu 8.04 (okok, confesso, gli ho assegnato due vcpu… :-D). E proprio perché e’ una VM paravirtualizzata riesce ad accedere direttamente al secondo array di dischi montati in Zraid (ZFS). E’ un po’ presto per tirare le somme, appena mi lo avrò testato saprò effettivamente se prestazioni e vantaggi hanno compensato lo stress e le notti insonni…
Ciao,
Paolo
Sì, in effetti con Solaris e OpenSolaris è possibile usare la paravirtualizzazione. Grazie per la segnalazione.
Se vorrai riportarci qualche notizia del tuo lavoro, te ne saremo tutti grati.
Come ho già detto in altri articoli la paravirtualizzazione consente di ottenere migliori prestazioni rispetto ad una esecuzione in un virtual machine completamente virtualizzata.
🙂
Ho visto che parli, tra le altre cose, anche di KVM e OpenVZ. Conosci questo progetto ?
http://pve.proxmox.com/wiki/Main_Page
Lo stò testando in questi giorni, veramente interessante, si installa in pochi minuti e gestisce container openVZ, “full virtualization” con KVM, cluster di server e bla bla. Tutto da una interfaccia web.
A fine anno la versione 1.0
Sì, ho già dato uno sguardo su questa soluzione, ma non l’ho provata anche perché ci sono un sacco di programmi del genere in circolazione (una vera esplosione) che cerco, prima di provarli, di farmi un’idea e scegliere solo una ristretta nicchia.
Comunque penso di provare tra un po’ di tempo anche questa soluzione.
Conosci qualche progetto simile basato però su Xen ?
http://www.valent-blog.eu/2008/07/13/virtual-machine-manager/
Bè, non è proprio la stessa cosa…
Questo è solo una interfaccia per gestire le VM, proxmox è una Debian Etch customizzata che installa tutto da zero (in 10 minuti di orologio) per fornire i servizi VM, tipo vmware ESX (con i dovuti distinguo), con il vantaggio che si possono “tirar su” sia container openvz/virtuozzo (in pochi secondi) che full VM con KVM.
Mi chiedevo se esistesse, appunto, qualcosa di similare con Xen al posto di KVM, tutto qua.
Ciao e continua con questi interessanti post sul mondo virtuale. 🙂
Ho capito, cercheresti una sorta di distribuzione orientata pesantemente per la gestione delle macchina virtuali.
No, mi dispiace ma io uso una normale distribuzione con sopra vari strumenti come virt-manager o enomalism, convirt…