KVM o Xen?

xen-vs-kvm 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.

workload3

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.

workload5

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.

workload7

workload8

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.

workload6

Sono assolutamente disponibile per chiarimenti!

12 pensieri riguardo “KVM o Xen?

  1. Ecco, era una cosa che mi ero chiesto, grazie per la risposta. E complimenti per il blog, post sempre molto interessanti. 🙂

    Ciao ciao!
    @:\>

  2. admin ha detto:

    Grazie 🙂
    Torno a sottolineare che le prestazioni di KVM sono condizionate _fortemente_ dal kernel del sistema operativo ospitante.

  3. Antonio Doldo ha detto:

    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

  4. admin ha detto:

    Grazie per i complimenti. Quest’articolo è uno dei migliori che ho scritto e mi ha preso un sacco di tempo tra fallimenti e successi 🙂

  5. Wrein ha detto:

    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

  6. valent ha detto:

    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.

    🙂

  7. Steno ha detto:

    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

  8. valent ha detto:

    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.

  9. Steno ha detto:

    Conosci qualche progetto simile basato però su Xen ?

  10. Steno ha detto:

    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. 🙂

  11. valent ha detto:

    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…

I commenti sono chiusi.

virtual machine

Articolo precedente

VMGL su sourceforge
linux

Articolo successivo

Un server web su Xen