www.rivadossi.org

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Virtualizzazione: Xen, VMWare

Macchine Virtuali

E-mail Stampa PDF

Cos'è una macchina virtuale? Perché utilizzarle? Quali sono i contesti di ragionevole utilizzo delle macchine virtuali? Per le persone che lavorano in ambito informatico le risposte a queste domande possono apparire scontate. D'altro canto, per i non addetti ai lavori, i termini “macchina virtuale”, “server virtuale (virtual server) possono apparire un poco oscuri. L'obiettivo che lo Studio Rivadossi si pone in questa pagina web è quello di cercare, nella maniera più semplice e possibile, di spiegare che cos'è la virtualizzazione, che cosa sono le macchine virtuali e quando è possibile utilizzarle (talvolta con vantaggi del tutto inattesi ed insperati da parte dell'utente finale).

macchina e server virtuale

Semplificazione

Nell'affrontare il discorso inerente le macchine virtuali verranno volutamente eseguite, in taluni passaggi, delle semplificazioni, necessarie per una comprensione anche da parte di chi non ha competenze informatiche specifiche. In altre parti del documento saranno forse accontentati i tecnici, che prediligono maggior precisione e rigore.

 

Hardware, sistema operativo, software

Pensando ad un computer ed al suo utilizzo, è possibile individuare almeno tre principali componenti del computer stesso: l'hardware del computer, il sistema operativo ed i software installati. Oggigiorno questi sono concetti più o meno noti, non ci si dilungherà nella spiegazione. Basti dire che l'hardware è più o meno ciò che di fisico (di visibile e toccabile con mano) vediamo di un computer: il case (corpo), i componenti interni (processore, memoria volatile, dischi fissi, bus dati, alimentatori, ventole, etc...). I software sono i cosiddetti “programmi”, quelli che sono a disposizione dell'utente per eseguire operazioni quali editing di testo, navigazione in Internet, gestione di flussi di dati, etc... . Il sistema operativo è una sorta di infrastruttura (software), che si pone fra l'hardware ed i software precedentemente descritti. In pratica, semplificando molto, il sistema operativo è ciò che consente ai software di accedere ai componenti hardware del computer senza occuparsi di tutti i dettagli delle operazioni. In questo modo che scrive software non deve preoccuparsi di gestire le operazioni di accesso all'hardware ad un livello troppo basso (troppo tecnico e specifico) e può contare sull'esistenza di un apposito software (il sistema operativo) che si occupa proprio di questo e lo fa in maniera efficiente.

I software (programmi) nella maggior parte dei casi, se non opportunamente adattati, funzionano solo se installati su un determinato sistema operativo. Per fare un esempio: un software che “gira” su Linux difficilmente funzionerà così com'è se si cerca di installarlo su un sistema operativo Windows. E' stato così individuato un primo limite dovuto ai programmi software: non sono facilmente trasportabili (il termine corretto è “portabili”) da un sistema operativo ad un altro. Un esempio pratico: se ho comperato un software per ambiente Windows (ovvero progettato per funzionare su computer dotati di uno dei sistemi operativi Microsoft Windows) ed ho un computer Mac (Apple Macintosh) rischio di non poter utilizzare il software acquistato.

Un altro limite che si ha sui computer viene dal legame che viene a crearsi fra il sistema operativo e l'hardware del computer stesso. Durante la fase di installazione del sistema operativo, esso riconosce quale hardware è presente sul computer e si “adatta” per sfruttare al meglio questo hardware, installando determinati sui componenti software (driver) piuttosto che altri. Se un brutto giorno il vostro computer si rompe, e pensate che (dato che sistema operativo, programmi e dati risiedono sul disco fisso) prendendo il disco fisso del computer rotto e mettendolo in un computer nuovo, tutto sia risolto, avrete un'amara sorpresa. Una volta acceso il computer, può darsi che il sistema operativo nemmeno riesca a partire, oppure la probabilità che risulti instabile è tanto più elevata quanto più è diverso l'hardware del nuovo computer su cui avete montato il disco fisso del computer originale (quello che si è rotto).

In definitiva, riassumendo all'osso, si ha che:

  • i software sono dipendenti dal sistema operativo e non è possibile far funzionare sul proprio computer software progettati (compilati) per altri sistemi operativi

  • l'hardware del proprio computer ed il suo sistema operativo sono intimamente legati, se si rompe l'hardware non è banale recuperare software e dati e farli funzionare su una macchina dotata di hardware differente

Ad oggi entrambe queste problematiche sono brillantemente affrontate e risolte dall'utilizzo di macchine virtuali.

 

La virtualizzazione: definizione e tipologie

La virtualizzazione, in ambito informatico e nello specifico contesto qui affrontato, può essere definita come un sistema che permetta di modificare la tradizionale interazione fra sistema operativo e hardware (macchina fisica), in maniera tale per cui il sistema operativo possa interagire con un'infrastruttura software che si interpone fra esso e l'hardware. Tale infrastruttura software rende l'hardware della macchina utilizzata trasparente al sistema operativo. Il significato di virtualizzazione, gli scopi della stessa ed i benefici potranno essere apprezzati solo dopo qualche esempio pratico e dopo aver considerato alcuni dettagli riguardanti le tipologie di virtualizzazione oggi utilizzate. Le tre principali tipologie di virtualizzazione sono:


  • emulazione (detta anche virtualizzazione)

  • paravirtualizzazione

  • virtualizzazione a livello di sistema operativo


La virtualizzazione (emulazione)

La virtualizzazione nell'approccio classico può essere definita come la realizzazione di di un'infrastruttura software che simuli l'hardware di un computer. Di fatto consiste nella realizzazione di un software che simula in modo più o meno completo il comportamento di un computer (dal punto di vista dell'hardware). La caratteristica cruciale della virtualizzazione intesa come emulazione consiste nel fatto di poter installare ed utilizzare, su una macchina virtuale basata sull'emulazione dell'hardware (di una certa tipologia di macchine), dei sistemi operativi non modificati, ovvero dei sistemi operativi “originali”, che non hanno subito nessuna modifica o adattamento al fine di poter essere installati sulla macchina virtuale stessa. Un esempio di processo di virtualizzazione nel segno dell'emulazione è quello messo in atto dal software VMWare: è un software che, una volta installato su un computer, consente di avviare un altro computer, un computer virtuale (una simulazione software di un computer) su cui è possibile installare un sistema operativo e dei software, al pari di un computer reale (fisico). A prima vista potrebbe sembrare un'assurdità compiere un'operazione di questo tipo, ma così non è. Facciamo un esempio pratico: su un computer, su cui è installato Windows XP, si decide di installare un software di virtualizzazione (VMWare Workstation). Una volta installato questo software, si avrà una finestra (messa a disposizione dal software stesso) che permetterà (dentro a questa finestra) di avviare (accendere) un computer fittizio (virtuale) su cui posso installare un sistema operativo. Come? Inserendo un CD di installazione nell'apposito lettore CD: il software di virtualizzazione condivide le risorse hardware della macchina vera (macchina reale) e le rende disponibili al computer fittizio (macchina virtuale). Quindi si potrà inserire un disco di installazione del sistema operativo Windows Vista, per esempio, oppure del sistema operativo Linux. L'installazione avverrà in modo simile a quella che si esegue con una macchina reale: vi sarà la creazione di una o più partizioni del disco (VMWare mette a disposizione varie modalità per riservare una porzione del disco fisso del computer fisico all'utilizzo da parte della macchina virtuale, senza dover necessariamente ripartizionare il disco della macchina fisica). Ad operazioni completate, si potrebbe avere un computer, dotato del sistema operativo Windows XP, che all'occorrenza (avviando il software VMWare) mette a disposizione (in una finestra o a tutto schermo, come si preferisce) un computer virtuale su cui è installato e funziona regolarmente una distribuzione di Linux, Debian, per esempio. Il risultato che consegue è l'avere un solo PC (fisico) su cui è possibile utilizzare contestualmente più sistemi operativi e relativi software. Al momento forse non sono ancora chiari, si vedranno nel seguito i contesti di utilizzo, davvero interessanti. Al momento vorrei spendere qualche parola ancora sulla virtualizzazione.

Ciò che sinora è stato visto è l'approccio “emulazione” alla virtualizzazione: un software che simula in toto un computer fisico, su cui è possibile installare un intero sistema operativo (e di conseguenza i software desiderati funzionanti con quel sistema operativo). L'approccio classico alla virtualizzazione consente (sempre con VMWare, per esempio) di installare ed avviare su un unico computer fisico più macchine virtuali (dotate ognuna di un proprio sistema operativo e dei propri software). Questo approccio alla virtualizzazione è molto potente, ha forse un unico limite: un software di virtualizzazione che utilizzi l'approccio dell'emulazione è piuttosto esoso in termini di risorse hardware, per cui è possibile andare incontro a problemi di sovraccarico e di scarsa densità. Una macchina virtuale, al contrario di ciò che si potrebbe pensare, è molto stabile: utilizzando l'approccio di emulazione si può in taluni casi non essere del tutto soddisfatti delle prestazioni della macchina virtuale, a causa dell'elevata richiesta di risorse di cui abbisogna. Volendo pensare in modo semplificato: su un unico computer fisico si ha installato un sistema operativo (Windows XP, nel nostro esempio) e, sopra a questo, un programma che consente di installare (condividendo le risorse hardware, e dunque memoria, CPU, accesso ai dischi, etc...) un altro sistema operativo. In pratica: su uno stesso PC girano contestualmente due sistemi operativi che, chiaramente condividono e si contendono le risorse. Per ottimizzato che sia il software di virtualizzazione, con l'approccio “emulazione” un certo sovraccarico si crea e le prestazioni ne possono risentire (soprattutto in determinati contesti). Pensate quanto sia caricato un PC (o server) fisico che contestualmente fa girare più macchine virtuali. Ne consegue che anche la densità (numero di macchine virtuali contemporaneamente attive e funzionanti su una macchina fisica che utilizzi un'infrastruttura di virtualizzazione) non potrà raggiungere valori soddisfacenti in determinati contesti.

 

Paravirtualizzazione

Esiste un'altra tecnica di virtualizzazione, definita paravirtualizzazione, con cui i è possibile abbattere notevolmente il carico di risorse necessarie per la gestione delle macchie virtuali, ed al contempo si riescono ad avere prestazioni (in termini di velocità e di densità) molto superiori a quelle ottenute utilizzando l'approccio “emulazione”. Con la paravirtualizzazione le prestazioni delle macchine virtuali si avvicinano a quelle delle macchine reali! Come è lecito aspettarsi, per disporre di tali vantaggi (a carico della paravirtualizzazione) bisogna attendersi che vi sia uno scotto da pagare, ed è rappresentato proprio da ciò per cui la paravirtualizzazione si differenzia dalla virtualizzazione basata su “emulazione”. La paravirtualizzazione non simula, agli occhi delle macchine virtuali, l'hardware di un computer: simula qualcosa di simile all'hardware di un computer, non in modo perfettamente fedele (come accade nella virtualizzazione emulazione). Di fatto con la paravirtualizzazione viene introdotto un layer (uno strato) software leggero fra l'hardware e il sistema operativo delle macchine virtuali: tale layer è denominato “hypervisor”. Questa tecnica consente di avere un gestione molto semplificata e meno esosa (in termini di risorse hardware) delle macchina virtuali, che raggiungono prestazioni simili alle macchine reali. Lo scotto da pagare è che le macchine virtuali devono avere un sistema operativo modificato, opportunamente adattato all'utilizzo in ambiente di paravirtualizzazione. Un esempio di prodotto (e di tecnologia di paravirtualizzazione) che consente questo tipo di approccio è Xen. E' un prodotto estremamente efficacie ed esprime al meglio le possibilità fornite dalla paravirtualizzazione. Xen è nato per essere supportato dal sistema operativo Linux, ed infatti molte distribuzioni Linux hanno un kernel compatibile con il funzionamento in ambiente Xen di paravirtualizzazione. Ma che cosa accade se si vuole utilizzare una macchina virtuale che preveda l'utilizzo di un sistema operativo “non portato su Xen”, ovvero non modificato per essere utilizzato nell'ambiente di paravirtualizzazione di Xen? Inizialmente questo sarebbe stato un ostacolo insormontabile e, per fare un esempio concreto, non sarebbe stato possibile installare il sistema operativo Windows (non adattato per girare su Xen) nell'ambiente di paravirtualizzazione Xen. Attualmente anche questo è possibille. Come? Grazie ad alcune innovazioni presenti nei processori a livello hardware: si tratta di un supporto hardware per la virtualizzazione di CPU, memoria, MMU. In pratica su macchine recenti è possibile avere un supporto hardware che consente (con Xen, per esempio) ai sistemi di paravirtualizzazione di gestire macchine virtuali che utilizzano sistemi operativi non adattati all'ambiente di paravirtualizzazione. Questi sistemi operativi possono restare inalterati, ed essere installati in un ambiente di paravirtualizzazione grazie alle innovazioni hardware presenti su alcune macchine recenti. Le suddette tecnologie di supporto hardware alla paravirtualizzione hanno nomi diversi a seconda del produttore che le propone:

  • Intel VT-x hardware virtualization support

  • AMD Pacifica hardware virtualization

Nota: i sistemi operativi non modificati per il supporto della paravirtualizzazione Xen, se utilizzati in Xen mediante Intel VT-x o AMD Pacifica, mostrano un certo decadimento in termini di prestazioni rispetto ai sistemi operativi già “adattati”, che supportano in modo nativo l'uso in ambiente Xen di paravirtualizzazione.

I sistemi di paravirtualizzazione centrano l'obiettivo di aumentare le prestazioni (in termini di velocità) delle macchine virtuali e parzialmente di abbassare la richiesta di risorse hardware da parte delle macchine virtuali stesse: la richiesta di RAM è comunque considerevole, e la più pesante conseguenza che ne deriva è una densità media di macchine virtuali presenti e funzionanti sulla medesima macchina fisica.

 

Virtualizzazione a livello di sistema operativo

Un'altra tecnica di virtualizzazione consiste nell'utilizzare un sistema operativo appositamente modificato, in funzione sulla macchine fisica, che abbia come scopo quello di gestire (nella maniera più efficiente possibile) delle macchine virtuali, intese come esecuzione di ambienti (leggi macchine virtuali), che utilizzano tutti il medesimo kernel (di un determinato sistema operativo). Con questa tecnologia si ottengono le migliori prestazioni in termini di prestazioni delle macchine virtuali, di densità, di allocazione dinamica delle risorse assegnate alle macchine virtuali stesse. D'altro canto (forse lo si è gia capito) lo scotto da pagare consiste nel non poter utilizzare macchine virtuali (sulla stessa macchina fisica) che utilizzino kernel differenti (e quindi sistemi operativi differenti) sulla stessa macchina fisica. Per fare un esempio: non è possibile con la virtualizzazione a livello di sistema operativo avere sulla stessa macchina fisica due macchine virtuali di cui una è una macchina Linux e l'altra Windows. E' possibile avere più macchine virtuali Linux basate su distribuzioni differenti di Linux, ovviamente a patto di utilizzare per tutte il medesimo kernel (che è quello presente sulla macchina fisica). Un prodotto che utilizza questa tipologia di virtualizzaizone è, ad esempio, OpenVZ.

Esempi d'uso e soluzioni proposte [work in progress]

L'utilizzo di tecniche di emulazione, paravirtualizzione, virtualizzazione a livello di sistema operativo, può avere molti ambiti di ragionevole utilizzo. Di seguito ne sono illustrati alcuni, in particolare quelli che lo Studio Rivadossi propone ai propri clienti per la risoluzione di determinate problematiche. Seguono esempi d'uso e soluzioni proposte:

server virtuali (indipendenti dall'hardware) [work in progress]

indipendenza dall'hardware, possibilità di cambiare hardware (rotture o upgrade).

server altamente affidabili [work in progress]

Backup completo di sistema operativo e dati, supporto completo per disaster recovery, etc...

Virtualizzazione di macchine reali [work in progress]

def. ed esempi d'uso

Isolamento dei servizi, test, sistemi complessi [work in progress]

Server e isolamento di servizi, esecuzione di test, sistemi complessi

Risparmio energetico e si spazio [work in progress]

Note sul risparmio energetico e sull'occupazione di spazio.

 


Tutti i contenuti del sito sono tutelati dalla licenza Creative Commons Creative Commons Attribuzione-Non commerciale-Non opere derivate 2.5 Italia.