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.