VIRTUALIZZAZIONE
Una "macchina virtuale" è, una macchina completa, con il proprio sistema operativo e le proprie
applicazioni, che però condivide le risorse hardware con altre macchine analoghe. Esattamente
come la macchina fisica, possiede la propria scheda madre, la memoria, la scheda video, la scheda
di rete ecc., con la differenza che sono condivisi su uno stesso hardware. Le macchine virtuali sono
indipendenti le une dalle altre e dall'hardware su cui sono in esecuzione. Ciò comporta che, nel caso
di blocco o di manutenzione di una di esse, le altre continuano il loro normale funzionamento. Una
macchina virtuale è, di fatto, un file che può essere spostato o copiato su macchine fisiche diverse
con grandi benefici.
Perchè virtualizzare
La virtualizzazione è una tecnologia software che permette di condividere le risorse di un computer
eseguendo simultaneamente più sistemi operativi e applicazioni sulla stessa macchina fisica. I
software di virtualizzazione sono in grado di smembrare le risorse fisiche per creare ambienti
virtuali distinti. Ad esempio, un disco può essere visto può essere visto come tante unità logiche
indipendenti, una macchina reale come molte macchine virtuali. Grazie all'evoluzione tecnologica
dei componenti hardware, oggi i computer hanno raggiunto un'elevatissima capacità di calcolo, di
cui solo una minima parte è effettivamente sfruttata. Questo si traduce in uno spreco energetico
perchè, in ogni caso, le risorse devono essere alimentate indipendentemente dal loro utilizzo. Per
ottimizzare l'utilizzo di queste risorse una soluzione molto diffusa consiste nella virtualizzazione.
Tramite software si realizza una condivisione delle risorse per creare ambienti indipendenti in grado
di riprodurre le stesse funzioni di un computer fisico.
Si tratta di un'astrazione dell'hardware che permette di suddividere gli elementi fisici dando la
possibilità di utilizzarli in modo più efficiente e flessibile.
Una macchina virtuale, allo stesso modo di una macchina fisica, dispone di una scheda madre con
una memoria RAM e una scheda video, il controller della scheda di rete e l'hard disk, con la
differenza che questi sono componenti virtuali che sfruttano e condividono le stesse risorse
hardware.
In pratica una macchina virtuale:
- è identica a una macchina fisica con la differenza che i componenti logici sono indipendenti
dall'hardware su cui sono in esecuzione e si possono spostare (un server virtuale diventa un file che
può essere copiato) su macchine diverse;
- è compatibile con i sistemi operativi standard, usa gli stessi driver dei dispositivi ed esegue le
applicazioni come su una macchina fisica;
- incapsula un sistema di elaborazione completo, è totalmente isolata dalle altre macchine virtuali e
opera in modo completamente distinto dalle altre, seppure tutte risiedano sulla stessa macchina
fisica e condividano lo stesso hardware.
In questo modo si ottengono molti vantaggi tra cui:
- la riduzione del numero di server presenti nei centri di calcolo e nelle organizzazioni;
- la riduzione dello spazio necessario alle macchine;
- la diminuzioni dei consumi energetici;
- l'abbattimento dei costi di manutenzione.
La virtualizzazione può essere realizzata purché siano rispettati i seguenti requisiti:
- partizionamento dell'hardware: gli elementi fisici sono messi a disposizione di ambienti
multipli in grado di condividere le risorse comuni, mantenendo l'indipendenza degli ambienti;
- mantenimento delle priorità di esecuzione: è compito del processo di virtualizzazione gestire
correttamente le code di esecuzione sfruttando il time sharing e le priorità di real time execution;
- replica dell'ambiente di astrazione hardware: ogni ambiente visualizzato ha un proprio livello
hardware indipendente e isolato seppure questo condivida le risorse del computer fisico che lo
ospita;
- gestione delle periferiche del computer ospitante condivise con gli ambienti virtuali creati: è
compito del processo di virtualizzazione (hypervisor) gestire la condivisione delle risorse fisiche,
allocandone gli indirizzamenti, e gestire le tabelle di traslazione contenenti gli indirizzi che
permettono di far corrispondere le risorse visibili alle macchine virtuali con le risorse fisiche;
- mantenimento dei criteri di sicurezza e d'isolamento: ogni ambiente virtualizzato mantiene
l'indipendenza sia verso gli altri ambienti virtuali sia verso il sistema di virtualizzazione stesso; non
sono ammessi scambi di processo e memory sharing a livello applicativo: è così garantito che aree
di memoria delle macchine virtuali non siano accessibili a nessun'altra macchina, logica o fisica che
sia. Questo fornisce l'assoluta certezza dell'integrità dei dati e della sicurezza nel trattamento delle
informazioni.
Layer fisico e layer virtuale
Vogliamo ora mostrare come avviene il passaggio dalla gestione dell'hardware fisico alla gestione di
quello virtuale. Ricordiamo la struttura di un computer, evidenziando i singoli componenti, come
mostrato nella fig.2, che rappresenta la classica descrizione degli starti hardware di un elaboratore
moderno: la CPU, la memoria RAM, la memoria di massa, le periferiche di input e di output. Sullo
strato hardware poggia il BIOS( Basic Input-Output System),un primo livello di software di base,
che permette di inizializzare le risorse necessarie alla partenza della macchina (fase di boot). Sopra
lo strato di BIOS si trova il sistema operativo, che ha lo scopo di interfacciare l'hardware e rendere
disponibili tutte le informazioni elaborate. Lo schema rappresentato in fig.3 mostra come avviene
questo processo a livello logico.
Per comprendere questo modello è importante riferirsi all'architettura di un sistema operativo.
In un sistema tradizionale un sistema operativo si compone di un nucleo (Kernel) che interfaccia i
drivers (programmi per la gestione delle periferiche hardware): su questo strato di poggia
l'interprete dei comandi, che prende il nome di shell. In un ambiente virtualizzato il sistema
operativo ha lo scopo principale di gestire le risorse fisiche e creare gli ambienti in cui saranno
alloggiate le nuove macchine, a loro volta composte di uno strato hardware virtuale, un proprio
BIOS, un proprio sistema operativo. Nella gestione di ambienti virtuali, la shell prende il nome di
hypervisor, il cui scopo principale è quello di gestire le risorse fisiche assegnandole agli ambienti
ospitati virtualmente.
Le funzioni dell'hypervisor
L'hypervisor, chiamato anche VMM(Virtual Machine Monitor) è il software di controllo che
permette di assegnare e gestire le funzioni necessarie affinchè le risorse fisiche siano rese
disponibili alle macchine virtuali che andremo a creare. Sopra lo strato dell'hypervisor si trova la
replica dell'astrazione hardware, che riproduce perfettamente lo schema di un elaboratore, dove
individuiamo gli stessi elementi tipici di un computer fisico: CPU, memoria RAM, memoria di
massa, periferiche di Input e Output, un proprio BIOS, il sistema operativo della macchina virtuale
e le applicazioni(Fig.6). L'hypervisor non permette quindi che dati e risorse si vadano a mescolare
fra i diversi ambienti operativi creati, nè fra questi e la macchina ospitante (host fisico).
Creazione dell'ambiente virtuale
Diciamo subito che un software usato per la realizzazione della virtualizzazione come Oracle
Virtual Box, pur consentendo a tutti gli effetti di creare un vero e proprio ambiente virtuale, non
garantisce la gestione efficiente della condivisione delle risorse fisiche. Questi software, infatti,
sono considerati dal sistema operativo come processi utente e non godono di particolari priorità
rispetto alle altre applicazioni attive sul computer che lo ospita. Per questo motivo l'esecuzione
dell'intero processo di virtualizzazione potrebbe risultare rallentato. Nei sistemi di virtualizzazione
avanzati l'hypervisor è interfacciato direttamente con l'hardware della macchina per gestire in modo
esclusivo i driver delle risorse fisiche al fine di migliorare le prestazioni(fig.11); inoltre l'hypervisor
ha anche la capacità di interfacciarsi direttamente con le funzioni native del microprocessore,
attivate grazie alle impostazioni del BIOS.
La gestione dello storage
Uno degli aspetti critici della virtualizzazione è l'organizzazione dello storage: lo spazio di memoria
di massa su cui archiviare i dati. In un ambiente non virtualizzato le risorse di memoria possono
trovarsi all'interno della macchina server oppure essere esterne. Il compito di accedere alla memoria
di massa, costituita tipicamente da uno o più dischi rigidi, è delegato al sistema operativo che
accede a queste periferiche, che vengono organizzate e strutturate tramite la definizione di un file
system. In un ambiente virtualizzato, l'architettura di storage comprende diversi livelli di astrazione,
che nascondono la complessità e i particolari della memoria di massa, permettendo di creare un
"contenitore logico", che offre un modello molto semplificato e omogeneo per l'allocazione dello
spazio di memoria dedicato a ogni macchina virtuale. Questo modello nasconde la tecnologia usata
per lo storage e permette la memorizzazione e la manipolazione dei file in modo semplificato. Un
disco virtuale all'interno di ciascuna macchina virtuale è rappresentato da uno o più file. Di
conseguenza è possibile operare su dischi virtuali come se fossero semplici file, che possono essere
spostati, aggiunti o sostituiti "a caldo" senza spegnere la macchina.
Negli ambienti di virtualizzazione il file system deve rendere disponibile il disco fisico a più
hypervisor contemporaneamente e perciò è necessario che:
- sia orientato alla condivisione
- permetta un rapido interfacciamento con l'hypervisor
- fornisca la sicurezza dei dati e la piena indipendenza fra gli ambienti ospitati
- garantisca l'integrità dei dati, controllando i corretti semafori per l'accesso condiviso
Gestione delle ridondanze (RAID)
Un aspetto fondamentale nella gestione della memoria è la gestione delle ridondanze: occorre
considerare la possibilità di guasti hardware o di altri eventi che mettano in pericolo l'integrità dei
dati. A tal fine è opportuno prevedere sistemi che siano in grado di sopperire a situazioni critiche,
come il guasto di una singola unità disco. La tecnica di configurazione RAID (Redundant Array of
Indipendent Disks) permette di raggruppare gli hard disk in un grande disco logico(volume) che poi
viene suddiviso in sottovolumi dedicate ai diversi server. Con opportuni accorgimenti, è possibile
gestire gli errori e i danneggiamenti di un'unità, mantenendo l'integrità dei dati. Una soluzione tra le
più semplici ed efficaci consiste nel generare un volume in RAID1, detto anche mirroring. Si
configurano due dischi fissi, di cui uno è la copia dell'altro (fig.15). Se uno si guasta, il sistema lo
esclude e continua a operare normalmente: verrà inviato un allarme al fine di poter procedere alla
sostituzione dell'unità corrotta e, dopo la sostituzione dell'unità guasta, il sistema provvederà
automaticamente alla ricostruzione dei dati sulla nuova unità. LA configurazione mirroring offre
ampie performance e sicurezza, ma è penalizzante a livello di resa come spazio disponibile: solo il
50% dello spazio totale dei dischi sarà reso disponibile. Per ovviare a questa limitazione, rendendo
comunque il sistema ragionevolmente coperto contro il guasto di una unità disco, sono state
introdotte altre tecnologie tra cui RAID 5.
Un sistema a tolleranza d'errore, dove i dati e la loro parità vengono distribuite su più dischi. La
parità è un valore calcolato che viene utilizzato per ricostruire i dati danneggiati. Detto anche "a
parità distribuita", la sua implementazione richiede almeno tre dischi. Al momento della scrittura
dei dati sul disco, essi vengono separati in blocchi, e distribuiti su unità diverse. La componente di
parità è automaticamente generata e viene scritta anch'essa, secondo un algoritmo che di volta in
volta ne calcola la posizione. Questo metodo permette il recupero dei dati anche in caso di avaria di
uno dei dischi, perchè i dato mancanti vengono ricostruiti, tramite i blocchi rimanenti e le
informazioni di parità aggiunte ai blocchi originali. A paragone del livello 1 di RAID, il livello 5
permette un uso più efficiente della capacità, poichè solo una parte dello spazio viene riservata per
le informazioni di ridondanza.
I driver delle macchine virtuali
Le virtual machines sono, atutti gli effetti, dei computer e come tali hanno proprie periferiche. Il
sistema operativo si interfaccia con tutti i dispositivi esistenti sull'hardware virtuale, installando i
relativi driver software per rendere operative le funzioni e ottimizzazione le prestazioni. I produttori
di sistemi di virtualizzazione mettono a disposizione, per i sistemi operativi (normalmente Windows
e Linux), un pacchetto di tools che contiene tutti gli aggiornamenti da installare sulle macchine
virtuali per permettere il corretto riconoscimento delle periferiche; la mancata installazione può
produrre effetti negativi come il non riconoscimento di alcune periferiche con conseguente caduta
delle prestazioni.
Configurazione dell'hardware virtuale
Una volta preparato l'host fisico possiamo iniziare a procedere alla creazione delle macchine virtuali
che saranno eseguite su di esso. Ogni risorsa allocata su una macchina virtuale dovrà essere
associata a una risorsa fisica. Ad esempio, sarà possibile allocare dello spazio-disco su una
macchina virtuale, solo se questo è disponibile realmente sulla macchina fisica. Lo stesso discorso
vale per la memoria e le altre periferiche virtuali.E' opportuno valutare con attenzione questo
aspetto in quanto una gestione non oculata delle risorse può causare gravi carenze nelle prestazioni
e numerosi disservizi. Un'eventuale saturazione delle risorse fisiche produrrà, con effetto domino,
un degrado di tutto il sistema: l'eventuale blocco creato da un'errata configurazione di una macchina
virtuale rischierà di produrre una paralisi delle altre macchine vortuali. Poichè uno dei vantaggi
dell'utilizzo degli ambienti virtualizzati è l'ottimizzazione dei costi, è opportuno configurare le
macchine virtuali solo con le risorse effettivamente necessarie: un utilizzo spropositato di risorse
può portare al loro esaurimento, riducendo il numero di macchine virtuali disponibili sull'host fisico
e creando problemi di prestazioni. D'altra parte dobbiamo anche considerare che un
sottodimensionamento di risorse può essere causa di anomalie che possono influire negativamente
sul complesso dell'intero ambiente virtuale. Ad esempio, se cnfigurassimo una quantità di memoria
insufficiente su di una virtual machine, tale da indurre il sistema a usare continuamente porzioni di
disco(swap), aumenteremmo esponenzialmente le operazioni di input/output su disco, influenzando
negativamente le prestazioni dell'host fisico e creando rallentamenti su tutte le macchine virtuali
ospitate.
E' buona norma considerare come limite di utilizzo delle risorse di memoria fisiche (disco e RAM) i
due terzi di quelle disponibili fisicamente.