Cloud computing: classi di virtualizzazione

Esistono diversi approcci o classi di virtualizzazione, ciascuna adatta a situazioni specifiche.

Kai Hwang, Jack Dongarra, Geoffrey Fox

Adattamento dal libro "Distributed and Cloud Computing: From Parallel Processing to the Internet of Things” (Syngress, una pubblicazione Elsevier)

In generale, esistono tre classi tipiche di architettura di macchine virtuali: l'hypervisor, la virtualizzazione basata su host e la paravirtualizzazione, che si differenziano per la posizione del livello di virtualizzazione. L'hypervisor è noto anche come Monitor macchina virtuale (VMM).

Architettura hypervisor

L'hypervisor supporta la virtualizzazione a livello hardware in dispositivi bare metal come CPU, memoria, disco e interfacce di rete. Il software hypervisor si frappone direttamente tra l'hardware fisico e il sistema operativo. Questo livello di virtualizzazione viene definito Monitor macchina virtuale (VMM) o hypervisor.

L'hypervisor fornisce le hypercall per i sistemi operativi guest e le applicazioni. Un hypervisor può essere costituito da un'architettura basata su microkernel come Microsoft Hyper-V, nonché un'architettura monolitica come VMware ESX per la virtualizzazione server.

Un hypervisor basato su microkernel include solo le funzioni di base e immodificabili (quali la gestione della memoria fisica e la pianificazione dei processori). I driver di dispositivo e altri componenti modificabili non sono controllati dall'hypervisor. Un hypervisor monolitico implementa tutte le funzioni menzionate in precedenza, comprese quelle dei driver di dispositivo.

Pertanto, la dimensione del codice di un hypervisor basato su microkernel è inferiore a quella di un hypervisor monolitico. Essenzialmente, un hypervisor deve essere in grado di convertire i dispositivi fisici in risorse virtuali dedicate per la macchina virtuale distribuita da utilizzare.

L'architettura Xen

Xen è un programma hypervisor Open Source sviluppato dall'Università di Cambridge. I componenti principali di un sistema Xen sono l'hypervisor, il kernel e le applicazioni. L'organizzazione dei tre componenti è importante.

Xen è un hypervisor basato su microkernel che separa i criteri dai meccanismi. L'hypervisor Xen implementa tutti i meccanismi, lasciando la gestione dei criteri al Domino 0 e non include alcun driver di dispositivo in modo nativo, bensì fornisce solo un meccanismo mediante il quale un sistema operativo guest può avere accesso diretto ai dispositivi fisici.

Di conseguenza, la dimensione dell'hypervisor Xen è piuttosto ridotta. Xen fornisce un ambiente virtuale posizionato tra l'hardware e il sistema operativo. Diversi fornitori sono impegnati nello sviluppo di hypervisor Xen commerciali, tra cui Citrix XenServer e Oracle VM.

Come altri sistemi di virtualizzazione, molti sistemi operativi guest possono essere eseguiti sopra l'hypervisor. Tuttavia, non tutti i sistemi operativi guest sono creati allo stesso modo e uno in particolare controlla gli altri. Il sistema operativo guest con capacità di controllo è denominato Dominio 0 e gli altri Dominio U. Il Dominio 0 è un sistema operativo guest privilegiato di Xen, che viene caricato inizialmente all'avvio di Xen senza che siano disponibili driver di file system. Il Dominio 0 è progettato per accedere all'hardware direttamente e gestire i dispositivi. Pertanto, una delle responsabilità del Domino 0 consiste nell'allocare ed eseguire il mapping delle risorse hardware per i domini guest (Dominio U).

Ad esempio, Xen è basato su Linux e il suo livello di sicurezza è di tipo C2, la relativa macchina virtuale di gestione è denominato Domino 0, che dispone del privilegio di gestione di altre macchine virtuali implementate nello stesso host. Se il Dominio 0 è compromesso, un utente malintenzionato può controllare l'intero sistema.

Pertanto, nel sistema di macchine virtuali sono necessari criteri per migliorare il livello di sicurezza del Dominio 0. Il Dominio, comportandosi da Monitor di macchina virtuale, consente agli utenti di creare, copiare, salvare, leggere, modificare, condividere, migrare e ripristinare le macchine virtuali in un modo semplice come la modifica di un file. Sfortunatamente, ciò comporta anche problemi di sicurezza durante il ciclo di vita del software e la durata dei dati.

Normalmente, possiamo immaginarci la durata di una macchina come una linea diritta. Lo stato corrente della macchina è un punto che avanza in modo monotono durante l'esecuzione del software. Durante questo lasso di tempo, è possibile implementare modifiche alla configurazione, installare software e applicare patch.

In tale ambiente, lo stato della macchina virtuale è simile a un albero: in qualsiasi punto, l'esecuzione può suddividersi in N diversi rami dove più istanze di una macchina virtuale possono esistente in qualsiasi punto dell'albero e in qualsiasi momento. Alle macchine virtuali è consentito il ripristino di stati precedenti di esecuzione (ad esempio, per correggere errori di configurazione) o una nuova esecuzione dallo stesso punto più volte (ad esempio, come mezzo per la distribuzione di contenuto dinamico o la circolazione di un'immagine di sistema "attiva").

Traduzione binaria con la virtualizzazione completa

A seconda delle tecnologie di implementazione, la virtualizzazione hardware può essere classificata in due categorie: la virtualizzazione completa e la virtualizzazione basata su host.

Con la virtualizzazione completa non è necessario modificare il sistema operativo host, poiché dipende dalla traduzione binaria per intercettare e virtualizzare l'esecuzione di determinate istruzioni sensibili non virtualizzabili. I sistemi operativi guest e le relative applicazioni sono costituiti da istruzioni critiche e non critiche.

In un sistema basato su host, vengono utilizzati sia un sistema operativo host che un sistema operativo guest. Tra il sistema operativo host e il sistema operativo guest è frapposto un livello software di virtualizzazione.

Virtualizzazione completa

Con la virtualizzazione completa, le istruzioni non critiche vengono eseguite direttamente nell'hardware mentre le istruzioni critiche vengono individuate e sostituite con trap nel Monitor di macchina virtuale emulati dal software. Gli approcci basati su hypervisor e su Monitor di macchina virtuale vengono considerati virtualizzazione completa.

Perché solo le istruzioni critiche vengono intercettate nel Monitor di macchina virtuale? Ciò è dovuto al fatto che la traduzione binaria può comportare un overhead notevole in termini di prestazioni. Le istruzioni non critiche non controllano l'hardware né minacciano la sicurezza del sistema, a differenza delle istruzioni critiche. Pertanto, l'esecuzione di istruzioni non critiche nell'hardware non solo può promuovere l'efficienza, ma anche garantire la sicurezza del sistema.

Tale approccio è stato implementato da VMware e molte altre aziende software. Il Monitor di macchina virtuale analizza il flusso di istruzioni e identifica le istruzioni privilegiate e di controllo. Quando queste istruzioni vengono identificate, vengono intercettate nel Monitor di macchina virtuale che emula il comportamento di tali istruzioni. Il metodo utilizzato in questa emulazione viene definito traduzione binaria.

Pertanto, la virtualizzazione completa combina la traduzione binaria con l'esecuzione diretta. Il sistema operativo guest è completamente distaccato dall'hardware sottostante. Conseguentemente, il sistema operativo guest non è al corrente del fatto di essere virtualizzato.

Le prestazioni della virtualizzazione completa potrebbero non essere ideali perché comportano la traduzione binaria, la quale è piuttosto dispendiosa in termini temporali. La virtualizzazione completa di applicazioni a elevato utilizzo I/O è problematica. La traduzione binaria impiega una cache di codice per memorizzare le istruzioni critiche tradotte per migliorare le prestazioni, ma aumenta l'utilizzo di memoria. Le prestazioni della virtualizzazione completa nell'architettura x86 è solitamente compresa tra l'80 e il 97% di quelle della macchina host.

Virtualizzazione basata su host

Un'architettura di macchina virtuale alternativa consiste nell'installare un livello di virtualizzazione sopra il sistema operativo host. Tale sistema operativo è comunque responsabile della gestione dell'hardware. I sistemi operativi guest vengono installati ed eseguiti sopra il livello di virtualizzazione e applicazioni dedicate possono essere eseguite nelle macchine virtuali. Anche altre applicazioni possono essere eseguite con il sistema operativo host direttamente.

Tale architettura basata su host presenta dei vantaggi ben distinti. In primo luogo, l'utente può installare questa architettura di macchina virtuale senza modificare il sistema operativo host. Il software di virtualizzazione può dipendere dal sistema operativo host per fornire i driver di dispositivo e altri servizi di basso livello. Ciò semplificherà la progettazione della macchina virtuale e la relativa distribuzione.

In secondo luogo, l'approccio basato su host interessa molte configurazioni di macchine host. Rispetto all'architettura basata su hypervisor/Monitor di macchina virtuale, anche le prestazioni dell'architettura basata su host possono risultare di basso livello. Quando un'applicazione richiede l'accesso hardware, coinvolge quattro livelli di mapping riducendo le prestazioni in modo significativo. Quando il software ISA (Internet Security and Acceleration) di un sistema operativo guest è diverso dal software ISA dell'hardware sottostante, sarà necessario adottare la traduzione binaria. Benché l'architettura basata su host presenta flessibilità, le prestazioni sono troppo ridotte per risultare utile nella pratica.

Paravirtualizzazione

Con la paravirtualizzazione deve essere modificato il sistema operativo guest. Una macchina virtuale paravirtualizzata fornisce API speciali che richiedono modifiche sostanziali al sistema operativo nelle applicazioni utente. La riduzione delle prestazioni è un problema fondamentale di un sistema virtualizzato. Nessun utente desidera utilizzare una macchina virtuale se è molto più lenta di una macchina fisica.

È possibile inserire il livello di virtualizzazione in diverse posizioni dello stack software della macchina. Tuttavia, con la paravirtualizzazione si tenta di ridurre l'overhead di virtualizzazione e di migliorare di conseguenza le prestazioni mediante la sola modifica del kernel del sistema operativo guest. Quando i sistemi operativi guest vengono paravirtualizzati, sono assistiti da un compilatore intelligente nella sostituzione delle istruzioni del sistema operativo non virtualizzabili con hypercall.

Il processo x86 tradizionale offre quattro livelli (Ring) di esecuzione delle istruzioni: Ring 0, 1, 2 e 3. Inferiore è il numero di ring, maggiore sarà il privilegio in base al quale viene eseguita l'istruzione. Il sistema operativo è responsabile della gestione dell'hardware e dell'esecuzione delle istruzioni privilegiate al Ring 0, mentre le applicazioni a livello utente al Ring 3. Il miglior esempio di paravirtualizzazione è KVM (Kernel-based VM).

Quando il processore x86 viene virtualizzato, un livello di virtualizzazione viene inserito tra l'hardware e il sistema operativo. Secondo la definizione di ring x86, anche il livello di virtualizzazione deve essere installato nel Ring 0. Diverse istruzioni al Ring 0 potrebbero causare dei problemi. Tuttavia, quando il kernel del sistema operativo guest viene modificato per la virtualizzazione, non può più essere eseguito direttamente nell'hardware.

Benché la paravirtualizzazione riduca l'overhead, comporta altri problemi. In primo luogo, la sua compatibilità e portabilità potrebbe essere in dubbio, poiché deve supportare anche il sistema operativo immodificato. In secondo luogo, il costo di manutenzione di sistemi operativi paravirtualizzati è alto, perché possono richiedere modifiche profonde al kernel del sistema operativo.

Infine, i vantaggi in termini di prestazioni della paravirtualizzazione variano enormemente a causa delle variazioni dei carichi di lavoro. Rispetto alla virtualizzazione completa, la paravirtualizzazione è relativamente semplice e più pratica. Il problema principale della virtualizzazione completa è il basso livello di prestazioni della traduzione binaria. Velocizzare la traduzione binaria è difficile. Pertanto, molti prodotti di virtualizzazione impiegano l'architettura di paravirtualizzazione. I popolari Xen, KVM e VMware ESX sono degli ottimi esempi.

KVM è uno strumento di paravirtualizzazione assistito da hardware, il che migliora le prestazioni e supporta sistemi operativi guest immodificati quali Windows, Linux, Solaris e altre varianti Linux.

Questo è un sistema di paravirtualizzazione di Linux, incluso nel kernel versione 2.6.20. Il kernel Linux esistente gestisce le attività di gestione della memoria e di pianificazione, mentre il KVM pensa al resto, il che rende la situazione più semplice rispetto alla situazione in cui l'hypervisor controlla l'intera macchina.

A differenza dell'architettura di virtualizzazione completa che intercetta ed emula le istruzioni privilegiate e sensibili al momento dell'esecuzione, la paravirtualizzazione gestisce tali istruzioni al momento della compilazione. Il kernel del sistema operativo guest viene modificato per sostituire le istruzioni privilegiate e sensibili con hypercall all'hypervisor o Monitor di macchina virtuale. Xen è un esempio di tale architettura di paravirtualizzazione.

Le istruzioni privilegiate sono implementate da hypercall all'hypervisor. Dopo aver sostituito le istruzioni con hypercall, il sistema operativo guest modificato emula il comportamento del sistema operativo guest originale. In un sistema Unix, una chiamata di sistema comporta un interrupt o routine di servizio. Le hypercall applicano una routine di servizio dedicata in Xen.

Questi diversi tipi di architetture di virtualizzazione presentano vantaggi e svantaggi diversi. Si consiglia di esaminare ciascuno di essi e adottare l'architettura più adatta al proprio ambiente.

Kai Hwang

Kai Hwang è professore di informatica presso la University of Southern California e professore esterno presso la Tsinghua University, Cina. Ha conseguito il dottorato in ingegneria elettrica e scienze informatiche presso la University of California, Berkeley. Ha pubblicato diversi testi in architettura informatica, aritmetica digitale, elaborazione parallela, sistemi distribuiti, sicurezza Internet e Cloud Computing.

Jack Dongarra

Jack Dongarra è professore universitario emerito in ingegneria elettrica e scienze informatiche per la University of Tennessee, membro onorario ricercatore presso l'Oak Ridge National Laboratory e "Turning Fellow" presso la University of Manchester. Dongarra è stato un pioniere nell'ambito dei benchmark dei supercomputer, dell'analisi numerica, dei risolutori algebrici lineari e dell'HPC (High-Performance Computing), nonché ha pubblicato diversi testi nelle stesse aree di interesse.

Geoffrey Fox

Geoffrey Fox è professore emerito di informatica, calcolo e fisica e decano associato di studi superiori e di ricerca presso la School of Informatics and Computing della Indiana University. Ha conseguito il dottorato dalla Cambridge University, Regno Unito. Fox è rinomato per il suo lavoro approfondito e per il suo gran numero di pubblicazioni in architettura parallela, programmazione distribuzione, Grid Computing, servizi Web e applicazioni Internet.

©2011 Elsevier Inc. Tutti i diritti riservati. Stampato con l'autorizzazione di Syngress, una pubblicazione di Elsevier. Copyright 2011. "Distributed and Cloud Computing: From Parallel Processing to the Internet of Things" di Kai Hwang, Jack Dongarra, Geoffrey Fox. Per ulteriori informazioni su questo titolo e altri testi simili, visitare il sito Web all'indirizzo: elsevierdirect.com.

Contenuto correlato