Università degli Studi di Perugia Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Tesi di Laurea Studio di soluzioni di Storage per sistemi ad alta affidabilità Candidato Oumar Mahamoud Mohamed Relatore Prof. Leonello Servoli Correlatore Álvaro López García Anno Accademico 2006-2007 Indice 1 Introduzione 1.1 Obiettivo della tesi . . . . . . . . . . . . . . 1.2 Alta disponibiltà . . . . . . . . . . . . . . . . 1.2.1 Definizione . . . . . . . . . . . . . . 1.2.2 Alta disponibiltà o Alta affidabilità . . 1.2.3 Calcolo del rischio . . . . . . . . . . 1.2.4 Alta disponibiltà dei servizi . . . . . 1.2.4.1 Considerazione da prendere 1.2.4.2 Ridondanza fisica . . . . . 1.2.4.3 Backup dei dati . . . . . . 1.2.4.4 Virtualizzazione . . . . . . 1.3 Organizzazione tesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 3 3 4 5 5 5 7 2 Virtualizzazione 2.1 Introduzione . . . . . . . . . . . . . . . . . . . 2.1.1 Un po di storia . . . . . . . . . . . . . 2.1.2 Definizione . . . . . . . . . . . . . . . 2.2 Vantaggi e applicazioni . . . . . . . . . . . . . 2.3 Tecniche di virtualizzazione . . . . . . . . . . 2.3.1 Virtualizzazione applicativo . . . . . . 2.3.2 Parallell virtual macchine . . . . . . . 2.3.3 Re-implementazione delle librerie . . . 2.3.4 Emulazione . . . . . . . . . . . . . . . 2.3.4.1 Svantaggi . . . . . . . . . . 2.3.4.2 Vantaggi . . . . . . . . . . . 2.3.5 Virtualizzazione per traduzione binaria 2.3.5.1 Svantaggi . . . . . . . . . . 2.3.5.2 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 10 11 11 12 12 12 13 13 13 14 14 I INDICE II 2.3.6 2.4 2.5 2.6 2.7 3 Xen 3.1 3.2 3.3 3.4 Paravirtualizzazione . . . . . . . . . . . . . . . . . 2.3.6.1 Svantaggi . . . . . . . . . . . . . . . . . 2.3.6.2 Vantaggi . . . . . . . . . . . . . . . . . . Teorie di Popek e Goldberg . . . . . . . . . . . . . . . . . 2.4.1 Una sfida per la virtualizzazione: x86 . . . . . . . . 2.4.1.1 Il problema del x86 . . . . . . . . . . . . 2.4.1.2 Livelli di privilegi di ISA . . . . . . . . . 2.4.1.3 Struttura di controllo di un sistema virtuale 2.4.2 Altri ostacoli . . . . . . . . . . . . . . . . . . . . . Soluzioni esistenti per il problema dell’x86 . . . . . . . . . 2.5.1 La virtualizzazione della CPU :Intel VT-x e AMD-V 2.5.2 Riferimento per provare la virtualizzazione . . . . . Prospettive future . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Virtualizzazione memoria . . . . . . . . . . . . . . 2.6.1.1 Senza virtualizzazione: . . . . . . . . . . 2.6.1.2 Con virtualizzazione . . . . . . . . . . . . 2.6.1.3 Soluzione esistente . . . . . . . . . . . . 2.6.2 Virtualizzazione delle periferiche . . . . . . . . . . Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 14 14 15 15 15 16 16 17 18 18 19 20 20 20 20 21 21 22 Xen e paravirtualizazzione . . . . . . . . . . . . Sistemi operativi supportati . . . . . . . . . . . . Architettura di Xen . . . . . . . . . . . . . . . . Confronto con altre soluzioni di virtualizzazione . 3.4.1 Sul funzionamento . . . . . . . . . . . . 3.4.2 Sulla performance . . . . . . . . . . . . Demoni Xen . . . . . . . . . . . . . . . . . . . . 3.5.1 Xend . . . . . . . . . . . . . . . . . . . 3.5.2 Xenstored . . . . . . . . . . . . . . . . . Conclusione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 24 25 26 26 27 28 28 28 28 4 Prototipo e Test 4.1 Prototipo . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Schema funzionale . . . . . . . . . . . . . . . . . 4.1.2 Composizione . . . . . . . . . . . . . . . . . . . 4.1.3 Funzionamento . . . . . . . . . . . . . . . . . . . 4.1.3.1 Virtualizzazione delle macchine critiche 4.1.3.2 Nodo di monitoraggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 29 29 30 30 31 3.5 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INDICE 4.2 III Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.2 File system remoti . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.3 Block device remoti via hardware . . . . . . . . . . . . . . . 32 4.2.3.1 iSCSI . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.3.2 ATA OVER ETHERNET (AoE) . . . . . . . . . . 33 4.2.3.3 Fibre Chanel . . . . . . . . . . . . . . . . . . . . . 33 Block device remoti via software . . . . . . . . . . . . . . . . 33 4.2.4.1 iSCSI . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.2.4.2 ATA over ETHERNET (AoE) . . . . . . . . . . . . 34 TEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.3.1 Sistema dei test . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.3.2 Tools per i test . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.3.2.1 IOzone . . . . . . . . . . . . . . . . . . . . . . . . 35 4.3.2.2 4.2.4 4.3 Bonnie . . . . . . . . . . . . . . . . . . . . . . . . 35 test scalabilità . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.3.3.1 iSCSI . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.3.3.2 AoE . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.3.3.3 Confronto dei risultati ed interpretazioni . . . . . . 42 Test I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.4.1 iSCSI . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.4.2 ATA . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.4.3 Confronto dei risultati ed interpretazione . . . . . . 45 Conclusione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.3.3 4.3.4 4.4 A Installazione e Utilizzazione di Xen 51 A.1 Installazione e creazione delle VM . . . . . . . . . . . . . . . . . . . 51 A.1.1 installazione . . . . . . . . . . . . . . . . . . . . . . . . . . 51 A.1.1.1 Dai tarballs . . . . . . . . . . . . . . . . . . . . . . 51 A.1.1.2 Dai sorgenti . . . . . . . . . . . . . . . . . . . . . 52 A.1.2 Configurazione del Grub . . . . . . . . . . . . . . . . . . . . 52 A.2 configurazione delle macchine virtuali e uso di xm . . . . . . . . . . 53 A.2.1 configurazione dei domini . . . . . . . . . . . . . . . . . . . 53 A.2.2 Utilizzo di Xen . . . . . . . . . . . . . . . . . . . . . . . . . 53 A.2.2.1 Si lancia Xen . . . . . . . . . . . . . . . . . . . . . 53 A.2.2.2 Comandi Xen . . . . . . . . . . . . . . . . . . . . 53 A.3 Esempio di una creazione di una macchina virtuale ubuntu . . . . . . 54 IV B iSCSI, ATA over ethernet, Iozone B.1 ATA over ethernet . . . . . . . . . . . . . . . . . . . . . . . B.1.1 Target . . . . . . . . . . . . . . . . . . . . . . . . . B.1.2 Initiator . . . . . . . . . . . . . . . . . . . . . . . . B.1.3 Alcuni problemi riscontrati . . . . . . . . . . . . . . B.1.3.1 Installazione del Target e Initiator . . . . . B.1.3.2 Creazione dei VM da imagini sportati col ATA . . . . . . . . . . . . . . . . . . . . B.2 iSCSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2.1 Target . . . . . . . . . . . . . . . . . . . . . . . . . B.2.1.1 configurazione /etc/ietd.conf . . . . . . . B.2.1.2 lancio del target . . . . . . . . . . . . . . B.2.2 Initiator . . . . . . . . . . . . . . . . . . . . . . . . B.2.2.1 Configurazione . . . . . . . . . . . . . . B.2.2.2 lancia l’initiator . . . . . . . . . . . . . . INDICE . . . . . . . . . . . . . . . . . . . . . . . . . standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 59 59 60 61 61 62 62 62 62 63 63 63 64 Elenco delle figure 1.1 1.2 1.3 Schema di ridondanza tramite clonazione dell’hardware . . . . . . . prototipo della soluzione della virtualizzazione . . . . . . . . . . . . Schema di un esempio della soluzione colla virtualizzazione . . . . . 5 6 8 2.1 2.2 2.3 Schermata di una macchina Ubuntu su PC Windows . . . . . . . . . . Una macchina virtuale Mac su linux . . . . . . . . . . . . . . . . . . Livelli di privilegi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 13 16 2.4 2.5 2.6 2.7 2.8 Struttura di controllo di un sistema virtuale VMCS di Intel e AMD . . . . . . . . . . . Indirizzamento senza virtualizzazione . . . Indirizzamento con virtualizzazione . . . . Schema del EPT e SPT . . . . . . . . . . . . . . . . . . . . . 17 18 20 21 21 3.1 3.2 3.3 3.4 Logo di Xen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Imagine di una schermata con aperti varie macchine virtuali con Xen Architettura di Xen . . . . . . . . . . . . . . . . . . . . . . . . . . Confronto performance Xen e altre soluzioni di virtualizzazione . . . . . . 23 25 26 27 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 Struttura del prototipo . . . . . . . . . . . . . . . . . . . schermata di nagios . . . . . . . . . . . . . . . . . . . . Struttura del sistema dei test . . . . . . . . . . . . . . . troughput per le operazione di read e write . . . . . . . . velocità media delle VM per le operazione di read e write distribuzione delle VM per read . . . . . . . . . . . . . distribuzione delle VM per write . . . . . . . . . . . . . Carico del file server . . . . . . . . . . . . . . . . . . . Troughput delle operazione di read e write . . . . . . . . Velocità media di read e write con aoe . . . . . . . . . . . . . . . . . . . . 30 31 35 37 38 38 39 39 40 40 V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ELENCO DELLE FIGURE VI 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 distribuzione delle VM per read . . . distribuzione delle VM per write . . . Carico del file server . . . . . . . . . Confronto sull’operazione di read . . Confronto sull’operazione di write . . Confronto sul carico del file server . . Operazione di write . . . . . . . . . . Operazione di read . . . . . . . . . . Operazione di write . . . . . . . . . . Operazione di read . . . . . . . . . . Confronto 3d sull’operazione di write Confronto 3d sull’operazione di read . Confronto 2d sull’operazione di write Confronto 2d sull’operazione di read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 42 43 43 44 45 45 46 46 47 47 48 48 Capitolo 1 Introduzione 1.1 Obiettivo della tesi Negli ultimi anni si è registrata una crescita notevole delle aspettative del mercato e della ricerca verso il mondo della computazione basta pensare che i siti internet più popolari forniscono talmente tante informazioni che un loro rallentamento o una loro interruzione comporterebbe perdite per milioni di euro o di più; la stessa cosa vale per i grandi network o per i sistemi computazionali dedicati alla ricerca scientifica come Grid1 . Tutti questi sistemi devono avere una caratteristica importante per poter soddisfare l’esigenza del mercato o della ricerca scientifica: l’alta disponibilità. L’obiettivo di questa tesi è quello di identificare una soluzione di storage per il prototipo di virtualizzazione realizzato nella sede del Dipartimento di Fisica a Perugia. 1.2 Alta disponibiltà 1.2.1 Definizione L’alta disponibiltà è un termine che in informatica è usato spesso ed indica in una architettura di sistema o in un servizio il tasso di disponibiltà. Il termine disponibilità indica la probabilità che un servizio o un sistema sia funzionante ad un instante preciso. Per misurare la disponibilità si usa spesso una percentuale composta da ’9’, se un servizio è disponibile al 99% significa che questo ultimo è indisponibile meno di 3.65 giorni per anno. La tabella 2.1 presenta il tempo di indisponibiltà sulla base di un anno(365 giorni)in funzione del tasso di disponibiltà. 1 Infrastruttura distribuita per consentire l’utilizzo di risorse di calcolo e di storage provenienti da un numero elevato di calcolatori interconnessi da una rete 1 CAPITOLO 1. INTRODUZIONE 2 tasso di disponibiltà 97% 98% 99% 99,9% 99,99% 99,999% 99,9999% durata di indisponibiltà 11 giorni 7 giorni 3 giorni e 15 ore 8 ore e 48 minuti 53 minuti 5 minuti 32 secondi Tabella 1.2: Tasso di disponibiltà 1.2.2 Alta disponibiltà o Alta affidabilità La disponibiltà viene definita come la percentuale di tempo in cui un sistema è in grado di eseguire un lavoro produttivo rispetto al tempo totale. Il valore limite al quale tutti mirano è chiaramente il 100%. Il concetto di disponibilità è più significativo di quello di affidabilità in quanto esprime più compiùtamente il vero obiettivo dei clienti, che è quello di garantire che le risorse, i servizi e le applicazioni del sistema siano funzionanti e accessibili dagli utenti in ogni momento, non quello di verificare quanto tempo passa prima che un singolo componente si guasti. Molti sistemi raggiungono un livello di disponibiltà di circa il 99%: una percentuale che a prima vista sembra molto elevata, ma se si fa riferimento a un periodo di un anno, l’1% di mancata disponibilità equivale a circa 90 ore, ovvero poco più di tre giorni e mezzo. E’ vero che una parte non trascurabile di queste 90 ore è dovuta alle fermate pianificate per la manutenzione preventiva, allo scopo di prevenire fermate non pianificate sicuramente più dannose. Tuttavia una disponibiltà del 99% è sufficiente solo per applicazioni non critiche o per lavorazioni non eccessivamente critiche. In altri casi, qualunque interruzione può mettere a repentaglio vite umane, quattrini e reputazione. Fino ad oggi, in tali situazioni sono stati spesso utilizzati sistemi fault tolerant2 , basati su architetture ampiamente ridondanti e su componenti molto specializzati, con i quali si cerca di prevenire qualunque interruzione del servizio agli utenti. I sistemi fault tolerant possono raggiungere o superare un livello di disponibiltà del 99,999% che equivale a una media di circa cinque minuti di fermata all’anno. Ma ovviamente per adottare una soluzione di alta disponibiltà esiste un costo da sostenere e quindi capita a domandarsi se conviene o no un approccio di questo tipo, per questo facciamo un piccolo studio di questo approccio e i vari fattori che intervengono nella sua implementazione sia come costi da sostenere che come utili. 2È la capacita di un sistema di non subire fallimenti anche in presenza di guasti 1.2. ALTA DISPONIBILTÀ 3 1.2.3 Calcolo del rischio Di fatto si può parlare di rischi di down-time che possono essere causati da diversi scenari di failure sia fisici che logici, ognuno dei quali ha pesi diversi. Nella realtà all’interno degli scenari di down-time, oltre ai failure non pianificati, sono da considerare anche i down-time prodotti da aggiornamenti ciclici dei sistemi sia hardware che software (aggiornamento di patch di sicurezza, service, partizionamenti di volume, upgrade di memoria, aggiornamenti del BIOS etc). Nell’ambito di ciascun sistema esistono quindi rischi differenziati legati a diversi scenari di down-time, per ciascuno di questi è necessario calcolare l’effetto prodotto sia prima che dopo l’implementazione della soluzione di alta affidabilità. Per ogni scenario (con e senza alta disponibiltà), i risultati degli effetti prodotti da ogni singolo evento d’outage devono essere sommati tra loro per ottenere il valore di effetto totale. Dal punto di vista matematico l’effetto prodotto non è altro che la moltiplicazione di tre variabili: • Probabilità che l’evento si manifesti (P) • Durata dell’effetto prodotto (D) • Percentuale degli utenti che subiscono l’outage (I) Per il fattore di probabilità bisogna prevedere la frequenza media con cui l’evento può manifestarsi per l’intera durata di vita del proprio sistema. Non esiste nessun metodo per calcolarlo nel futuro. Tuttavia questo dato può essere ottenuto sulla base dell’analisi storica dei down-time (ecco dunque l’importanza di avere policy per l’auditing dei disservizi). Per ciò che riguarda la durata è necessario considerare il tempo medio di interruzione prodotto dall’outage. In questa valutazione bisogna prevedere non solamente il tempo di disservizio ma anche i tempi necessari al ripristino dei dati e al ripristino delle attività da parte degli utenti. L’unita di misura risulta essere il tempo. Nella valutazione occorre essere molto conservativi e basarsi sulle esperienze vissute. Per area di impatto si considera invece la percentuale di utenti coinvolta nel disservizio.Per esempio un down-time pianificato può impattare solo il 15% della totalità degli utenti mentre un down-time non pianificato può raggiungere facilmente il 100% se si manifesta durante gli orari di picco. 1.2.4 Alta disponibiltà dei servizi Un servizio è una applicazione o un insieme di operazioni accessibile attraverso un’interfaccia di cui possono usufruire i clienti. Dei esempi molto semplici sono il servizio CAPITOLO 1. INTRODUZIONE 4 web, ed il servizio di posta elettronica. In questa i servizi che si vogliono rendere altamente disponibile sono servizi Grid, per questo d’ora in poi ci riferiremo a questi ultimi ed ai vari problemi relativi ad essi. 1.2.4.1 Considerazione da prendere L’erogazione di un servizio può essere interrotta da problemi, che possono essere di natura diversa come il malfunzionamento di una macchina causato da un problema hardware o software o la caduta del sistema per cause esterne ( mancanza di potenza elettrica, guasto di climatizzatori) in questo caso la disponibiltà è azzerata perchè il servizio non è più disponibile ovvero il servizio è in stato di Down quindi per avere un tasso di disponibilità alto bisogna diminuire al minimo il tempo di down-time. L’alta disponibiltà chiede un ambiente adatto per le macchine ecco alcune delle caratteristiche salienti che questo ambiente deve avere: • alimentazione stabile per garantire una continua erogazione della corrente alle macchine; • ventilazione continua per evitare il rischio di riscaldamento delle macchine; • servizio di ripristino pronto per ripristinare il sistema in caso di problemi o guasti; • servizio di sicurezza per evitare che persone non esperte o mal intenzionate si introducano nel locale; • cavi di alimentazione e di comunicazione devono essere ridondanti e protetti inoltre bisogna anche stare attenti al rischio di incendio e di inondazione. Oltre a questo bisogna anche avere un piano di controllo per rilevare o prevenire guasti, come test di vita TCP HEALTCHECK , programmi di test invocati periodicamente (heartbeat) ,interfacce di tipo < <diagnostic> > sui componenti; questo piano deve riguardare ogni livello di architettura, ogni componente , ogni legame di comunicazione tra i componenti,ecc.... . Queste sono alcune delle considerazioni da fare per evitare un guasto ma è quasi impossibile eliminare il rischio al 100% . Perchè ci sono dei problemi come incendio o terremoti che non possono essere prevenuti, perciò bisogna orientarsi per cercare soluzioni per diminuire al minimo il down-time. Ci sono molte tecniche che sono usate per risolvere il problema di minimizzare il down-time; sono presentate di seguito le più importanti. 1.2. ALTA DISPONIBILTÀ 5 1.2.4.2 Ridondanza fisica Questa tecnica suggerisce di replicare i componenti sui quali sono in esecuzione i servizi richiesti, creando una copia esatta della macchina . Il tempo di down-time è abbastanza piccolo in quanto è uguale solo al tempo necessario all’ avvio della macchina copia. Ma questa tecnica comporta un consumo di risorse economiche, un numero elevato di indirizzi IP, è necessario la presenza 24h/7 di un personale pronto a spostare i servizi ed avviare le macchine ” clone ”. Un esempio di questa soluzione è illustrato nella figura seguente. Figura 1.1: Schema di ridondanza tramite clonazione dell’hardware 1.2.4.3 Backup dei dati La ridondanza fisica assicura la disponibiltà dei dati di un sistema ma non permette di assicurare una protezione dei dati contro gli errori di manipolazione degli utenti o contro catastrofi naturali come incendio, inondazione o terremoto. È quindi necessario di prevedere meccanismi di salvaguardia o backup (idealmente su siti lontani per garantire l’incolumità dei dati). Si effettua quindi un backup dei dati delle macchine su cui i servizi sono in esecuzione, in questo modo quando cade una macchina viene riavviato coi dati di backup; in questo caso il tempo di down-time dipende dal tempo necessario per recuperare i dati di backup e far ripartire una nuova macchina con questi dati. Questa soluzione garantisce più l’integrità che l’altà disponibilità in quanto il tempo di ripristino del sistema con i dati di backup è molto elevato. 1.2.4.4 Virtualizzazione Questa è una tecnica in continuo sviluppo e può essere usata sia per garantire l’alta disponibiltà, sia per sfruttare al meglio le risorse disponibili in un sistema. La virtualiz- CAPITOLO 1. INTRODUZIONE 6 zazione permette di creare in un dato sistema diversi ambienti di esecuzione, isolati uno dall’altro, nei quali si possono far eseguire distinti sistemi operativi(chiamati macchine virtuali)3 . Per garantire l’alta disponibilità, si virtualizza le macchine che forniscono i servizi, in modo che questi non siano legati alle macchine fisiche. Il file system delle macchine vrituali risiedono in un file server con altà affidabilità, tutte le macchine fisiche della rete possono accedere ai questi file system e quindi caricarli a traverso la rete. Quando una macchina fisica si guasta o si rompe è allora possibile traferire le macchine virtuali in esecuzione su questa macchina su un altra macchina, i file system di queste macchine vengono caricati dal file server dove sono memorizzati. L’operazione di trasferimento è automatizzata ed effettuata da un programma di monitoraggio. Vediamo il prototipo di questa soluzione nella figura 1.2. Figura 1.2: prototipo della soluzione della virtualizzazione Lo storage è il punto fondamentale del prototipo, rende visibile alle macchine fisiche i dati delle macchine vrituali attraverso la rete, ci sono varie soluzioni sia hardare che software per realizzarlo, in questa tesi vedremo e testeremo alcuni di loro. I vantaggi di questa soluzione sono. • Servizi indipendenti dall’ hardware. • Costi più sostenibili in confronto alle altre soluzioni. • massima utilizzazione delle risorse. 3 tratteremo più in profondità questo argomento nel capitolo 2 1.3. ORGANIZZAZIONE TESI 7 gli svantaggi: • Downtime di circa 1 minuto mentre con linux-HA di pochi secondi!! • Complessità elevata Vediamo nello schema della figura 1.3 un esempio di funzionamento di questa soluzione. La macchina fisica 2 cade ( figura 1.3.a)quindi le macchine virtuali 3 e 4 che erano in esecuzione su questa sono in down-time. È necessario spostare le macchine virtuali verso un altra macchina. Vengono spostati le macchine virtuali della macchina fisica 2 verso la macchina 1 (figura 1.3.b). La situazione è ripristinata (figura 1.3.c) ed le VM girano tutti sulla macchina 1 come mostrato nella figura 1.5. 1.3 Organizzazione tesi I capitoli che seguono saranno cosi strutturati: • Capitolo 2:in questo capitolo si spiega la virtualizzazione e le varie tecniche attraverso cui si può realizzarla; • Capitolo 3:in questo capitolo si spiega che cos’è Xen , come funziona, e le sue caratteristiche • Capitolo 4:in questo capitolo si presenta il prototipo realizzato e i test effettuati per trovare una soluzione di storage per le macchine virtuali; • Capitolo 5:Conclusioni e sviluppi futuri per la virtualizzazione e Xen • Appendice A: installazione e uso di xen • Appendice B: uso dei protoccoli ATA e iSCSI. 8 CAPITOLO 1. INTRODUZIONE a) caduta di una macchina fisica b) trasferimento delle VM verso una altra macchina c) situazione ripristinata Figura 1.3: Schema di un esempio della soluzione colla virtualizzazione Capitolo 2 Virtualizzazione 2.1 Introduzione 2.1.1 Un po di storia La virtualizzazione non è una tecnica nuova nel mondo della computazione, dato che risale all ’inizio dell’era dell’informatica. Si possono citare i lavori svolti in questo campo Da Popek e Goldberg in 1974 che hanno analizzato i diversi tipi di soluzione di virtualizzazione possibile, i loro rispettivi vantaggi e inconvenienti. Recentemente si è sentito parlare molto di virtualizzazione dal passaggio dei processori MAC ai processori INTEL. In più aziende del calibro d’Intel , AMD si sono lanciate nella sfida cercando di risolvere la questione con l’ottimizzazione dei processori. Si può quindi quasi dire che la virtualizzazione è passata sotto i riflettori. Quasi perchè, malgrado tutto, la virtualizzazione rimane una tecnologia abbastanza misteriosa per molte persone. 2.1.2 Definizione La virtualizzazione, è certo una bella parola, ma non molto chiara. Precisiamo prima che ci sono 2 tipi di virtualizzazione: quella hardware e quella software. Nel primo caso l’obiettivo è quello di fare funzionare molti sistemi operativi sulla stessa macchina separatamente l’uno di l’altro come se fossero su macchine fisiche distinte. Nel secondo caso si tratta di fare girare molte applicazioni diverse nella stessa macchina. La virtualizzazione è un insieme di tecniche hardware o software per realizzare questi obiettivi, anche se non è semplice. La gestione delle risorse fisiche (CPU,memorie,periferie,..) è garantita dal OS, le 9 CAPITOLO 2. VIRTUALIZZAZIONE 10 eventuali applicazioni non hanno alcun legame diretto con le risorse fisiche, passando tutte attraverso l’OS. Dunque per concezione un sistema operativo si aspetta ad essere l’unico ad avere la gestione della macchina e di tutte le sue risorse ed a dialogare direttamente con la CPU. La virtualizzazione quindi ha il compito di fare ”credere” ad ogni OS della macchina di essere l’unico, anche se in realtà sono molti a condividere le risorse, perciò il software di virtualizzazione deve simulare una macchina virtuale per ogni OS. Ogni OS vede solo la sua macchina virtuale e funziona senza preoccuparsi di niente. Vediamo la definizione di alcuni termini usati spesso. • macchina o sistema host:macchina che ospita le macchine virtuali. • macchina guest o macchina virtuale:sistema virtualizzato, l’insieme di risorse materiali (disco, memoria, periferie, CPU,..)simulato dal software di virtualizzazione • Hypervisore o VMM (VIRTUAL MACCHINE MONITOR):La componente di sistema che realizza la virtualizzazione. Esistono numerosi nel mercato (Vmware, Virtual PC, Parallels Workstation, Xen, Qemu...). L’ hypervisore può essere installato sia come una applicazione del sistema operativo ospite sia come uno strato software più profondo del sistema operativo. 2.2 Vantaggi e applicazioni Le macchine virtuali hanno molte applicazioni, spesso nel campo professionale. Un primo utilizzo è quello di avere più sistemi operativi contemporanemente attivi su una sola macchina, molto più facilmente di un multi boot. Si può quindi pensare di avere Windows su un Macintosh, Windows, MacOs e Linux sulla stessa macchina etc. Al di la del semplice gadget, è un vantaggio per tutti gli sviluppatori che devono provare i loro codici sotto ogni piattaforma, sotto ogni navigatore etc .... . La figura 2.1 mostra un esempio di una macchina virtuale Windows su una macchina Ubuntu (Linux). Figura 2.1: Schermata di una macchina Ubuntu su PC Windows 2.3. TECNICHE DI VIRTUALIZZAZIONE 11 L’uso delle macchine virtuali ha il anche vantaggio di fare girare su un PC di ultima generazione delle applicazioni vecchie. Per esempio per usare dei software o giochi sviluppati per un sistema ”vecchio” ed incompatibile con il hardware di una macchina recente, il sistema ”vecchio” può essere virtualizzato. Questa situazione è molto frequente anche in grandi aziende , che non possono cambiare i software ad ogni rinnovamento di materiale. Un altro vantaggio dell’ uso delle macchine virtuali è una stabilita ed una sicurezza importante : infatti un guasto di una macchina virtuale non ha effetti sulle altre macchine. Lo stesso, un virus che infetta una macchina virtuale non contamina le altre. In alcuni casi una VM è incapsulata in un file1 . È quindi molto facile realizzare un backup del suo sistema ad un istante preciso, nel caso di un problema o di un virus basta cancellare il file della VM in corso e rimpiazzarlo col file di backup realizzato un giorno prima. Questo file è anche molto facilmente trasferibile da un computer ad un altro. Infine, e sopratutto, la virtualizzazione permette alle aziende di ottimizzare l’utilizzazione delle loro risorse fisiche. Grazie alla virtualizzazione, è non solo possibile di fare funzionare più macchine virtuali su un solo computer, ma anche di utilizzare più computer per fare girare una sola macchina virtuale. Le risorse sono quindi utilizzate al meglio secondo il carico. 2.3 Tecniche di virtualizzazione Ci sono molti tipi di virtualizzazione, alcuni utilizzati frequentemente altri meno. Vediamo alcuni di loro. 2.3.1 Virtualizzazione applicativo Si virtualizza al livello delle applicazione , esempi più conosciuti sono: • Java : JVM(Java virtual macchine), quando un programma scritto in java viene compilato si ottiene un codice chiamato Bytecode, questo codice può essere eseguito o interpretato dalla JVM su una piattaforma diversa da quella con la quale è stato generato, questo operazione è possibile grazie alla portabilità di JVM. 1 vedere l’appendice B, creazione macchina virtuale CAPITOLO 2. VIRTUALIZZAZIONE 12 2.3.2 Parallell virtual macchine Una macchina virtuale che dispone delle risorse di più macchine fisiche. Questo tipo di virtualizzazione è spesso usato nel ambito dei Cluster2 e del calcolo parallelo. In questo caso l’obiettivo è quello della ricerca della massima dell’efficienza per una singola applicazione in quanto questa viene distribuita tra le varie macchine fisiche che formano una sola macchina virtuale. Esempi di questa tecnica sono le librerie PVM. La macchina virtuale di PVM è realizzata da un insieme di processi demone (1 per ogni host). Questa tecnica ha una migliore gestione eterogeneità ed è fault tolerant ma è troppo specifica in quanto è usato principalmente solo per la distribuzione del calcolo. 2.3.3 Re-implementazione delle librerie In questa tecnica si riscrivano le librerie di un sistema operativo per fare funzionare dei programmi sotto un altro sistema operativo. Come esempio si può citare Wine che è un implementazione delle librerie Windows. 2.3.4 Emulazione L’emulazione consiste nel riprodurre da un software chiamato emulatore le funzioni di un determinato sistema su un secondo sistema differente dal primo. Per esempio un programma scritto sotto il sistema operativo MS Windows non può girare sotto Linux o MacOS ma facendo una emulazione dell’ ambiente windows in Linux o MacOS si può fare funzionare questo programma. Esistono varie categorie di emulatori cosi come si può emulare una piattaforma in molte maniere. È possibile emulare completamente un ambiente sia hardware che software oppure soltanto uno dei due. È più facile tecnicamente fare un emulazione di tipo software poiché può bastare un semplice traduttore che traduce al sistema che ospita le istruzioni. Nel caso invece dell’emulazione hardware sarà necessario simulare la circuiteria ed il comportamento fisico del sistema come avviene ad esempio nel MAME3 . Altri emulatori presenti nel mercato sono: • VICE, emulatore dei computer a 8 bit • PCSX2, emulatore di PS2 • Dosbox, emulatore di MS-DOS Questa tecnica ha sia dei vantaggi che degli svantaggi vediamone. 2 è un insieme di computer connessi tramite una rete telematica con lo scopo di distribuire una computazione molto complessa 3 Multi Arcade Macchine Emulator, software in grado di emulare varie piattaforme di gioco arcade 2.3. TECNICHE DI VIRTUALIZZAZIONE 13 2.3.4.1 Svantaggi La maggior parte delle tecniche di virtualizzazione si basano sullo stesso concetto: intercettare al volo le richieste dei sistemi operativi verso la macchina virtuale e tradurli affinché possano essere eseguiti dalla macchina fisica o reale.Questa descrizione è sufficiente a fare capire il principale problema della virtualizzazione : la perdita dell’efficienza. In effetti un istruzione è rimpiazzata da una decina di altre istruzioni, ed il tempo di calcolo è più lungo di una situazione non virtuale. Questo problema è ancora peggiorato nel caso dell’emulazione poiché l’emulatore deve intercettare la totalità delle istruzioni del software emulato e questo comporta una perdita di efficienza maggiore. 2.3.4.2 Vantaggi L’emulazione permette di eseguire una applicazione in qualsiasi tipo hardware che sia compatibile o no. Un esempio preciso è quello dell’emulatore DosBox, un emulatore DOS open source (free) che può essere utilizzato per far girare i vecchi programmi che hanno problemi a funzionare sui altri sistemi operativi. Si può anche emulare un sistema operativo all’interno di un altro sistema come per esempio mostrato nella figura 2.2 dove MacOs è emulato su Linux. Figura 2.2: Una macchina virtuale Mac su linux 2.3.5 Virtualizzazione per traduzione binaria Quando i sistemi usano hardware compatibili come nel caso di Linux, Windows, e di MacOS (da quando è uscito il MacIntel) la virtualizzazione può operare in un modo più efficiente; infatti in questa tecnica l’hypervisore sfoglia le istruzioni usate da ogni sistema operativo ospite e traduce solo quelle che possono causare incomprensione o danni al sistema virtualizzato. Gli altri sono direttamente eseguiti dal processore. CAPITOLO 2. VIRTUALIZZAZIONE 14 Vedremo nel paragrafo seguente come l’hyervisore effettua questa operazione e quali sono le istruzioni ”pericolosi”. Alcuni software che sono usati per questa soluzione sono: • Vmware • VirtualBox (open source). Adesso valutiamo Vediamo gli vantaggi e svantaggi di questa tecnica. 2.3.5.1 Svantaggi Ha una complessità di funzionamento elevata e richiede una compatibilità hardware tra il sistema guest ed il sistema host. 2.3.5.2 Vantaggi Il vantaggio principale di questa tecnica è l’efficienza; infatti i più veloci virtualizzatori riccorono tutti alla Binary traduction; oltre a questo permette anche di non modificare i sistemi guest. 2.3.6 Paravirtualizzazione Per ridurre ancora il rallentamento dovuto alla virtualizzazione, le soluzioni di paravirtualizzazione prendono il problema al contrario : modificano direttamente i sistemi operativi guest in modo che non ci sia più tanto il bisogno della traduzione delle istruzioni. Xen di cui è basato questa tesi è un perfetto esempio. 2.3.6.1 Svantaggi Richiede la modifica del sistema operativo guest. Se l’efficienza può essere garantita, si perde il vantaggio dell’universalita, poiché ci vuole una versione speciale del software di paravirtualizzazione per ogni versione di sistema operativo che si vuole utilizzare. 2.3.6.2 Vantaggi Offre le maggior prestazioni, la perdita di performance è di pochi punti percentuali. 2.4. TEORIE DI POPEK E GOLDBERG 15 2.4 Teorie di Popek e Goldberg Nell’ articolo ” Formal Requirements for Virtualizable Third Generation Architectures” uscito in 1974, Gerald J. Popek e Robert P. Goldberg[1] hanno introdotto le condizioni necessari e sufficienti in un’ architettura per supportare in maniere efficiente un sistema virtualizzato. Queste condizioni sono ancora utilizzate come riferimento nella virtualizzazione. Secondo Popek e Goldberg le caratteristiche di un sistema perchè operi come un virtualizzatore sono: • Fedeltà: il software deve essere eseguito dalla VMM in modo analogo ad una esecuzione via hardware • Prestazioni: la maggior parte delle istruzioni del guest devono essere eseguite dall’hardware senza l’intervento della VMM • Sicurezza: la VMM gestisce tutte le risorse Il problema sollevato da loro è quello di determinare le caratteristiche che L’ISA (Istruction Set Architecture) della macchina originale deve avere per poter essere virtualizzato. In effetti in un’ architettura per poter essere virtualizzata in modo efficiente, tutte le sue istruzioni devono essere privilegiati. 2.4.1 Una sfida per la virtualizzazione: x86 2.4.1.1 Il problema del x86 Come è noto un processore è capace di eseguire solo un numero ridotto di istruzioni elementari. Queste istruzioni sono chiamati ISA (Instruction Set Architetture), sono memorizzati in memoria e non sono modificabili . Questo insieme di istruzioni definisce le capacita di un processore la cui l’architettura fisica può essere ottimizzata eseguendo le istruzioni del ISA il più efficacemente possibile. Esistono molte ISA, Il più conosciuto nel mondo dei PC è senza altro il x86, usato dai processori INTEL e AMD da quando esistono . Si può citare per esempio il PowerPc, l’Alpha AXP, il SPARC o i recenti AMD64 O EM64T. Molto presente e molto usato ma non si può dire che l’x86 è un esempio perfetto di ISA, e sopratutto non si presta molto bene alla virtualizzazione.Perché? Le istruzioni dell’ISA x86 non sono tutte uguali. Tra loro, alcune possono modificare la configurazione delle risorse in possesso del processore, e sono dette critiche. Per proteggere la stabilita della macchina, queste istruzioni non possono essere eseguite da tutti i programmi. CAPITOLO 2. VIRTUALIZZAZIONE 16 2.4.1.2 Livelli di privilegi di ISA Dal punto di vista della CPU i programmi appartengono a 4 categorie, o livello di astrazione come mostrato nella figura 2.3. Figura 2.3: Livelli di privilegi Ogni anello rappresenta un livello di privilegio decrescente. Le istruzioni più critiche richiedono i privilegi più alti , di ordine 0. Purtroppo, su processore x86, 17 di questi istruzioni critiche possono essere eseguite da processi nei livelli 1, 2, o 3. Questo crea un grosso problema ai programmi di virtualizzazione; un sistema operativo è infatti previsto per funzionare nell’ anello 0 ed utilizzare le istruzioni critiche per distribuire le risorse del processore tra le diverse applicazioni. Ma quando si trova in situazione di guest o ospite su una macchina virtuale, lo stesso OS non deve poter modificare le risorse fisiche sotto il rischio di causare errori al sistema. Solo l’hypervisor deve avere questi diritti. Bisogna quindi intercettare tutte le istruzioni critiche. 2.4.1.3 Struttura di controllo di un sistema virtuale La figura 2.4 mostra come la macchina virtuale deve interporsi tra la macchina reale ed i sistemi operativi guest. Per quanto riguarda le istruzioni privilegiate non ci sono problemi in quanto possono solo essere eseguite dai programmi che appartengono al livello 0 in questo caso cioè l’hypervisor, quindi l’OS guest gira in un anello non privilegiato insieme ad altre applicazioni e la richiesta di istruzioni privilegiate genera un errore che è gestito dal VMM. Invece è molto più difficile per le 17 istruzioni ”pericolose” e non privilegiati. Queste ultimi non generano errori automatiche, devono essere 2.4. TEORIE DI POPEK E GOLDBERG 17 rilevati man a mano dal VMM, poi reinterpretati . Questo comporta un sovraccarico di calcolo importante, ed una grande complessità del software hypervisor. Figura 2.4: Struttura di controllo di un sistema virtuale Come mostrato nella figura 2.4 il sistema guest ” crede ” che gira in un dominio privilegiato ma realmente questo dominio non lo è, quindi l’Hypervisor deve provvedere a gestire e a soddisfare tutte le richieste dei sistemi guest installati nel dominio non privilegiato ma che possono richiedere esecuzione delle istruzioni privilegiate. 2.4.2 Altri ostacoli A parte i difetti dell’ x86, la virtualizzazione dell’hardware pone altri problemi. Per esempio, l’OS guest ”pensa” che ha accesso alla totalità della memoria della macchina. Invece non è cosi perchè la condivide con gli altri OS ed il VMM. Quindi è il compito di questo ultimo di sorvegliare ed intercettare i tentativi di accesso del OS invitato ai indirizzi di memoria non disponibile e ridirigerlo ad altri indirizzi liberi. Altro esempio è il fatto che l’ OS invitato gira in un dominio insieme ad altri applicazioni, e questo mette a rischio la sua stabilita. Infine l’OS invitato non deve scoprire che esso sta girando in dominio non privilegiato altrimenti rischia di guastare il sistema; quindi è sempre il VMM che deve intercettare le istruzioni suscettibili di rivelare lo stato di privilegio degli invitati. L’ultimo ostacolo è la gestione delle periferiche : generando degli accessi in memoria e delle interruzioni, le periferie devono essere gestite dal VMM che deve poi emularle per ogni OS invitato. Una fonte in più per il ritardo e soprattutto una perdita enorme di funzionalità. 18 CAPITOLO 2. VIRTUALIZZAZIONE 2.5 Soluzioni esistenti per il problema dell’x86 Per semplificare tutto questo, Intel ha concepito VT e AMD V. Queste due tecnologie sono molto simili, al punto che non faremo differenza tra loro nella descrizione seguente. Intel VT e AMD V si compongono entrambi di tre parti ciascuno destinato a risolvere le difficoltà della virtualizzazione del CPU , della virtualizzazione della memoria, e della virtualizzazione delle periferie. Vediamo ciascuna di queste soluzioni. 2.5.1 La virtualizzazione della CPU :Intel VT-x e AMD-V Per facilitare la virtualizzazione della CPU, Intel e AMD hanno cercato di eliminare la necessita di sorvegliare e di tradurre delle istruzioni. Per fare questo, nuove istruzioni sono state aggiunte. Una nuova struttura di controllo è anche nata , battezzata VMCS (Virtual Macchine Control Structure ) mostrato nella figura 2.5. Tra le nuove istruzioni, una di loro (VM entry) permette di commutare il processore in una nuova modalità di esecuzione, dedicato ai sistemi guest. Questa modalità possiede anche quattro livelli di privilegi diversi. Cosi sono eliminati i problemi legati all’esecuzione del OS guest nel anello 3 : l’ OS guest può girare in anello 3 della modalità VM. Quando il contesto lo richiede il processore passa dalla modalità guest alla modalità normale. Questo passaggio è deciso dalle condizioni fissate dal VMM grazie ai bit di controllo memorizzati nella VMCS. Figura 2.5: VMCS di Intel e AMD Al momento del passaggio, lo stato del processore nella modalità guest è memorizzato nella VMCS e lo stato del processore nella modalità host è ricaricata dalla VMCS. Le istruzioni necessarie sono quindi eseguite, poi il VMM fa uscire il processore dalla modalità host per riportarlo in modalità guest , memorizzando lo stato del processore host nella VMCS e ricaricando lo stato guest precedentemente memorizzato. Non c’è quindi più traduzioni di istruzioni. Il passaggio si fa in maniera automatica grazie alle regole fissate nella VMCS. Intel e AMD pensano cosi di aumentare considerevolmente 2.5. SOLUZIONI ESISTENTI PER IL PROBLEMA DELL’X86 19 la velocità del hypervisor. In tanto, dei test realizzati da Vmware tendono a dimostrare che il guadagno non è cosi evidente. Il guadagno sarebbe più netto con Parallels Workstation. Intel VT e AMD-V sono delle soluzioni ancora molto giovani e non mature. Dei grossi progressi in questo dominio sono attesi. D’altra parte, Intel e AMD hanno previsto di allargare il campo delle ottimizzazioni. Nel futuro prossimo è prevista la virtualizzazione come della memoria o del Input/Output. 2.5.2 Riferimento per provare la virtualizzazione Si presenta alcuni delle soluzione più frequenti nel mercato: 1. Microsoft Virtuali PC 2004. Non prende in carico VT o V. 2. Vmware Workstation 5.5 : La versione 5.5 prende già in carico le ottimizzazione Intel VT. La beta di Vmware Workstation 6.0 è uscita . È gratuita e contiene il supporto di Windows Vista. 3. Vmware Fusion: È il nome della beta di Vmware workstation per Mac Intel 4. Parallels Workstation o Parallels Desktop for Mac: Il primo funziona su PC, il secondo su Mac. Entrambi gestiscono le ottimizzazioni Intel VT. In più Parallels Desktop for Mac è l’unico hypervisor a gestire l’accelerazione 3D offerte dalle schede grafiche sotto le sue macchine virtuale. 5. Qemu per Linux : opera come virtualizatore 6. Xen: soluzione di paravirtualizzazione, Opensource. Nella tabella 2.1 sono presenti i processori Intel e AMD che integrano le ottimizzazioni descritte precedentemente. INTEL AMD Core Duo, Core solo, Core 2Duo, Core 2 extreme Pentium EE, Pentium D Xeon, XeonMp Itanium 2 tutti i CPU in socket AM2 tranne le sempron Opteron Socket F Turion S1 Tabella 2.1: Processori AMD e Intel che implementano il supporto alla virtualizzazione CAPITOLO 2. VIRTUALIZZAZIONE 20 2.6 Prospettive future 2.6.1 Virtualizzazione memoria Un sistema operativo quando è l’unico a girare su una macchina, si occupa dell’indirizzamento totale della memoria centrale. In altri termini, decide di allocare una certa quantità per ogni applicazione, quantità che sarà compresa tra il bit d’indirizzo x e quello d’indirizzo y. Questo indirizzamento è realizzato su un spazio virtuale, detta lineare o logico, che rappresenta la totalità della memoria centrale disponibile, la memoria virtuale può essere rappresentata sul disco fisico. La corrispondenza tra questa memoria lineare e la memoria fisica è realizzata da una unita di CPU, la MMU (Memory Management Unit). La MMU mantiene aggiornato la page table ovvero la tabella di corrispondenza tra gli indirizzi fisici e quelli lineari. Su una macchina sulla quale girano più di un sistema operativo, ciascuno deve utilizzare solo una porzione della memoria totale. La condivisione è decisa dal VMM nel momento della creazione di ogni VM. Per esempio, l’OS 1 deve utilizzare i bit zero a x, e l’OS 2 i bit x+1 a z, ma purtroppo un OS inizia sempre il suo indirizzamento a zero. Per evitare i conflitti tra i vari OS che girano simultaneamente, bisogna quindi che l’hypervisore blocca tutti i accessi dei OS verso la MMU e li reinterpreta. Il VMM costruisce quindi, per ogni OS, una ”falsa” page table che fa corrispondere gli indirizzi lineari reclamati dal OS a quegli che li sono riservati. Questa tabella di corrispondenza intermediaria è chiamata Shadow Page Table (SPT). Infine, un semplice accesso alla memoria diventa un operazione complessa. Vediamo gli schemi di queste operazioni con virtualizzazione e senza. 2.6.1.1 Senza virtualizzazione: La MMU Page Table traduce gli indirizzi della memoria virtuale in indirizzi fisici della memoria centrale Figura 2.6: Indirizzamento senza virtualizzazione 2.6.1.2 Con virtualizzazione Gli indirizzi lineari delle macchine virtuali vengono tradotti in indirizzi logici della macchina fisica o host dal VMM SPT, infine questi indirizzi vengono tradotti in indirizzi fisici dal MMU PT 2.6. PROSPETTIVE FUTURE 21 Figura 2.7: Indirizzamento con virtualizzazione 2.6.1.3 Soluzione esistente Per ridurre il lavoro del VMM, Intel e AMD hanno inventato Extended Page Tables (EPT) e Nested Page Tables (NPT) rispettivamente. Si tratta in emtrembi i casi di implementare gli SPT in hardware. In più della PT della MMU, ci sono quindi una EPT o NPT per ogni OS guest. Queste tabelle permettono infatti di dedicare una parte degli indirizzi fisici della memoria ad ogni OS. Questi possono quindi accedere direttamente ai loro dominio di indirizzo, senza provocare l’intervento del VMM. L’insieme degli indirizzi di memoria fisiche dei OS guest è poi ricompilato nel EPT. Lo schema è il seguente: Figura 2.8: Schema del EPT e SPT Queste optimizazzione non sono ancora attivati nei processori Intel o AMD venduti attualemente. Si pensa che lo saranno nel corso dell’anno 2007. 2.6.2 Virtualizzazione delle periferiche L’ultimo cantiere della virtualizzazione hardware è quello delle periferiche. In effetti, attualemente, i VMM utilizano un driver generico per tutte le VM qualsiasi sia il hardware installato nella macchina. I sistemi operativi guest vedono delle periferiche virtuali, emulati dal VMM, e tutte le loro richieste vanno al VMM che li reindirizza vers l’hardware. La virtualizzazione delle periferiche permeterebbe di montare direttamente una periferica su una macchina virtuale, questo permetterebe un guadagno importante in termini di velocità di esecuzione. Ma sopprattuto si può sperare di vedere le funzionalità delle VM moltiplicati: riconoscimento di un gran numero di apparecchiature come fotocamera, stampa, chiavi USB,ecc.. . 22 CAPITOLO 2. VIRTUALIZZAZIONE 2.7 Conclusioni Questa tecnologia costituirà uno dei temi di maggior sviluppo dei CPU Intel, e AMD per i prossimi anni . Sotto questo auspicio, e grazie a la moltiplicazioni del numero del core interno dei processori. I vantaggi che ognuno potrà trarne sono tanti, sicurezza, stabilita, interoperabilità, ecc.. ma bisogna aspettare finché le performance offerte dalle ottimizzazioni hardware implementate dai costruttori saranno veramente efficaci. Capitolo 3 Xen Xen è un progetto ideato dall’università di Cambridge in Inghilterra. Conosce una popolarità crescente, poichè comincia ad essere integrato nei distribuzioni Linux dei più grandi editori del mondo libero (Novell, Red Hat, Fedora). Il progetto ha addirittura contribuito alla creazione di una azienda, XenSource, che recentemente ha siglato un accordo tecnologico con Microsoft che tratta la prossima offerta di virtualizzazione che sarà proposta dal futuro server Windows Longhorn. Attualmente esistono due versioni : Xen 2.0 e Xen 3.0. La versione a cui ci riferiremo di seguito sarà l’ultima ovvero la 3.0. Figura 3.1: Logo di Xen 3.1 Xen e paravirtualizazzione Xen è un monitor di macchine virtuale o hypervisor. Ma contrariamente alle altre soluzioni che esistono in questa categoria, Xen possiede una particolarità, è una soluzione 23 CAPITOLO 3. XEN 24 molto efficiente in termini di performance. Questa particolarità è dovuta al fatto che Xen è basata non sulla virtualizzazione ma sulla paravirtualizazzione, cioè Xen non mira a creare un emulazione dell’hardware di un generico computer x86 su cui far girare il sistema operativo , ma piùttosto di regolare e controllare l’accesso alle risorse fisiche della macchina da parte delle varie istanze delle macchine virtuali; questo approccio prende il nome di paravirtualizzazione ed è simile a ciò che si utilizza nel campo dei mainframe e dei supercomputer, come ad esempio nei sistemi operativi VM/CMS e OS/360 di IBM, in cui il virtual machine monitor di macchine virtuali è implementato direttamente nell’hardware dei processori. Questo tipo di approccio accresce l’efficienza.Tuttavia questo comporta che il sistema operativo destinato a girare sulla macchina virtuale (guest) debba essere portato per essere reso compatibile con Xen, in quanto alcune chiamate di sistema del kernel non sarebbero possibili. Questa modifica permette già di realizzare una parte della virtualizzazione. 3.2 Sistemi operativi supportati Una altra particolarità di Xen è la sua terminologia. La macchina virtuale è differenziata del contesto nel quale gira, questo contesto chiamato “dominio”. Il manuale di uso dice “la relazione tra le macchine virtuali ed i domini è simile a quella tra i programmi ed i processi : una macchina virtuale è una entità persistente che risiede nel disco. Quando è caricata per essere eseguita, funziona in un dominio. Ogni dominio possiede un identificatore unico, identico ad un identificatore di un processo”. Un dominio Xen può essere costituito da kernel Linux (2.4 e 2.6) e NetBSD/FreeBSD. Si distinguono 2 tipi di domini : • Dom0 o dominio privilegiato • DomU o dominio non privilegiato Il primo rappresenta l’istanza di macchina virtuale creata direttamente dall’hypervisor al momento del boot. Da esso possono essere fatte partire successivamente le altre macchine virtuali. Tutte le altre istanze di macchina virtuale in esecuzione sono dominioU e per ogni istanza viene creato un nuovo dominio. Nella tabella xx è presente la lista dei sistemi operativi supportati per ogni dominio fino alla versione attuale (versione 3.0). La figura 3.2 mostra un esempio di varie macchine virtuali o sistemi operativi in una sola macchina con Xen che dirige ”l’orchestra”. 3.3. ARCHITETTURA DI XEN Sistema operativo Linux 2.6 NetBSD 3.1 NetBSD 4.0_BETA2 sistema operativo non-modificato 25 Dom0 (host OS) Si No Si No DomU (guest OS) Si Si Si solo Intel Vt-x e AMD-v Tabella 3.1: Sistemi operativi supportati da Xen Figura 3.2: Imagine di una schermata con aperti varie macchine virtuali con Xen 3.3 Architettura di Xen Xen non ha supporto diretto per la maggior parte dell’hardware. Per utilizzarlo si fa ” aiutare ” dal primo sistema virtuale, il Domain0, che è anche il sistema dall’interno del quale tutti gli altri possono essere gestiti. Tale sistema è il primo a fare boot, e direttamente alla partenza del sistema (Xen non è un sistema operativo completo, e non può esistere ”da solo”). Altri domini possono avere l’accesso a parte dell’hardware, se specificato nella configurazione. Sullo schema mostrato in figura 3.3 , si vede la presenza dello strato Xen VMM sullo strato hardware. Al di sopra si trova il Dominio0, privilegiato; questo ultimo è l’unico capace di utilizzare le chiamate del sistema specifiche, è lui che controlla gli altri domini. Le richieste provenienti dagli altri domini sono trattate dal Dominio0. CAPITOLO 3. XEN 26 Figura 3.3: Architettura di Xen 3.4 Confronto con altre soluzioni di virtualizzazione Generalmente, la virtualizzazione necessita un sistema operativo host installato sull’ hardware, e possibilmente uno strato intermedio. Uno o molti sistemi operativi guest possono quindi essere installati contemporaneamente. 3.4.1 Sul funzionamento • I software di virtualizzazione di tipo QEMU, VMWare Workstation/GSX ou VirtualPC sono delle macchine virtuali complete per i sistemi operativi guest, è inclusa anche un BIOS software (Firmware) . Il sistema operativo guest ”crede” di girare su un hardware, allorché è virtualizzato dal software di virtualizzazione. Queste soluzioni sono le più semplici da realizzare ma poco efficienti. • Il software di virtualizzazione di tipo VMWARE ESX permette delle macchine virtuali complete per i sistemi operativi guest; includono anche un BIOS, ma a differenza delle soluzioni sopra descritte, le macchine virtuali si trovano su un Kernel leggero chiamato vmkernel. È un architettura molto simile a Xen. • I software di tipi chroot, Linux-VServer, OpenVZ o BSD Jail fanno solo isolare certi aspetti o risorse del sistema operativo Host come il file system o gli indirizzi di memoria. Queste soluzioni sono molto efficienti, dato che c’è poco sovraccarico, ma gli ambienti virtualizzati sono poco o niente isolati. • User Mode Linux(acronimo UML) è un kernel Linux compilato per funzionare 3.4. CONFRONTO CON ALTRE SOLUZIONI DI VIRTUALIZZAZIONE 27 in spazio utente di memoria. Si lancia quindi come una applicazione dentro il sistema operativo Host. UML può lanciare e gestire le sue applicazioni in maniera isolata dalle altre UML che girano sulla macchina. Soluzione, molto poco efficiente, poichè due KERNEL sono caricati; è usata sopratutto nello sviluppo del kernel. 3.4.2 Sulla performance In figura 3.4 è ben visibile che il decadimento di performance di Xen è mimino rispetto ad altre soluzioni. Il rendimento con SPEC INT2000 (CPU intensive), che possiede un tasso di operazione di I/O molto basso quindi impegna meno i OS, le tre soluzioni di virtualizzazione hanno rendimento abbastanza buono. Invece per gli altri benchmarks che hanno un tasso elevato di I/O le altre soluzioni si dimostrano poco efficienti rispetto a Xen. Figura 3.4: Confronto performance Xen e altre soluzioni di virtualizzazione (L= native Linux, X= Xen/Linux, V= VMware Workstation, U= User Mode Linux) CAPITOLO 3. XEN 28 3.5 Demoni Xen 3.5.1 Xend Il demone Xend gira nel dominio0 esso è incaricato alla gestione, creazione, controllo dei domini non privilegiati, si possono dare ordini a questo demone a traverso il tool xm (vedere appendice A) o attraverso un altro tool con un interfaccia Web. 3.5.2 Xenstored Questo demone si occupa della gestione e della memorizzazione delle informazioni relative alle varie istanze che girano sopra il domini0 3.6 Conclusione Xen è l’esempio perfetto della creatività e della credibilità del mondo Open Source1. In effetti, questo progetto universitario è diventato uno dei maggiori nell’ambito della virtualizzazione, tecnologia che ha tutto il suo futuro davanti, ed i recenti accordi siglati con Microsoft dimostrano che anche i grandi “ calibri “ sono interessati da questa realtà. Per l’utilizzazione, Xen è realmente piacevole ad utilizzare, con delle performance eccezionali. Il grosso problema, per adesso è la sua complessità rispetto alle altre soluzioni che hanno tutte un interfaccia grafica completa. Virt-manager è un interfaccia che può essere usata anche per Xen ma non è un strumento ideale sopratutto per i debuttanti che non sono in grado di configurare i file di creazione di domini che vedremmo nell’apendice A. Inoltre, non ci sono ancora strumenti come P2V (Physical to Virtual), che permettono di creare domini a partire di una macchina fisica esistente. Ma la versione, non gratuita di Xen, XenEnterprise, permette di superare queste lacune, offrendo un interfaccia molto più completa e uno strumento di migrazione P2V, che funziona solo con i Kernel “Xenzzati”. 1 software libero senza licenze restrittivi Capitolo 4 Prototipo e Test In questo capitolo si spiega come funziona il prototipo dell’alta disponibiltà tramite la virtualizzazione, e si presentano le varie tecnologie di memorizzazione che possono essere utilizzate. Infine si presentano i test effettuati sulle varie soluzioni di storage per trovare la soluzione migliore in termini di scalabilità e di efficienza. 4.1 Prototipo 4.1.1 Schema funzionale La figura 4.1 rappresenta lo schema funzionale del prototipo 4.1.2 Composizione Come si vede nella figura 4.1 la struttura è composta da: • Macchine fisiche: Sono le macchine sul quale sono presenti le macchine virtuali, Xen è installato su questi e ovviamente sono sistemi compatibili con Xen come per esempio GNU/Linux. • Macchine virtuali: Si tratta delle macchine virtuali dove girano i servizi; ogni macchina virtuale può essere trasferita da un macchina fisica ad un’altra • Memorizzazione: È il sistema che si occupa della memorizzazione dei VM; questi ultimi vengono caricati attraverso la rete dallo storage alle macchine fisiche, ci sono varie soluzioni disponibile, effettueremo varie test per trovare la soluzione migliore. 29 CAPITOLO 4. PROTOTIPO E TEST 30 Figura 4.1: Struttura del prototipo • Nodo di monitoraggio: Si occupa del controllo della situazione delle VM; rileva la caduta o il malfunzionamento delle VM e causa il loro trasferimento verso altre macchine fisiche. 4.1.3 Funzionamento L’obiettivo principale di questo prototipo è quello di rendere altamente affidabili le macchine che forniscono i servizi. Questo scopo è realizzato in 2 passi, il primo passo consiste nel virtualizzare le macchine sulle quale sono in esecuzioni i servizi, il secondo passo consiste nel monitoraggio della situazione in modo continuo per rilevare e risolvere problemi. Ognuno di questi passi è complesso e richiede un’accurata scelta sia di hardware che di software. 4.1.3.1 Virtualizzazione delle macchine critiche Le macchine critiche sono le macchine in cui un loro rallentamento o un loro guasto comporterebbe una perdita dei dati importanti e non solo. Questi macchine sono virtualizzati di conseguenza anche i dati o servizi presenti su queste. Come spiegato nel capitolo 2 ci sono vari tecniche di virtualizzazione, ma la tecnica adottata in questo caso è la para virtualizzazione usando come hypervisor Xen. Xen deve essere installato su tutte le macchine fisiche che devono accogliere le macchine virtuali, in questa operazione ovviamente bisogna tenere conto che non tutti i sistemi operativi (Vede- 4.2. STORAGE 31 re capitolo 3) possono eseguire Xen, per questo si è scelto di usare una distribuzione Linux(da aggiungere). 4.1.3.2 Nodo di monitoraggio Il nodo di monitoraggio è molto importante in questa soluzione, perchè si occupa non solo della rilevazione dei problemi delle macchine virtuali ma anche alla risoluzione di questi problemi. Per realizzare questo controllo, ci sono molti software nel mercato come Nessus, Snort, Ethereal, CFengine Nagios, questo ultimo è quello usato in questo prototipo. Nagios è una applicazione open source per il monitoraggio di computer e risorse di rete. La sua funzione base è quella di controllare nodi, reti e servizi specificati, avvertendo quando questi non garantiscono il loro servizio o quando ritornano attivi. Nagios si decompone in 3 parte: • Un motore di applicazioni che ordina i comandi di supervisione • Un interfaccia WEB, che permette di avere una vista della situazione e delle possibili anomalie • I plugins, una centinai di minipogrammi che possono configurati in maniera personalizzata Figura 4.2: schermata di nagios 4.2 Storage 4.2.1 Introduzione Il nodo di storage si occupa della memorizzazione di dati, in questo caso come si è detto precedentemente della memorizzazione dei file system delle macchine virtuali. CAPITOLO 4. PROTOTIPO E TEST 32 Questo nodo è uno dei nodi più critici di questa soluzione in quanto da la possibilità a tutte le macchine fisiche di poter accedere i file system delle VM a traverso la rete. Questo rende le VM visibile a tutti i nodi della rete, cosi quando cade una macchina fisica il nodo di controllo può trasferire le macchine virtuali che erano in esecuzione su questa macchina verso una altra macchina fisica che funziona caricando i loro file system direttamente dal nodo di storage. Ovviamente lo storage deve essere affidabile per garantire l’integrità dei dati. Per la realizzazione dello storage ci sono varie tecnologie disponibili tra cui: • File system remoti • Block device remoti via hardware • Block device remoti via software 4.2.2 File system remoti Questa soluzione consiste di installare un file system distribuito, in questo modo tutte le macchine possono accedere ai dati che si trovano nelle altre macchine. Ci sono molti file system disponibili, tra cui il NFS, AFS, GFS, GPFS, ecc ... . Uno o più file server fanno un export di partizioni di dischi nella rete, di seguito le altre macchine possono usare queste partizione. L’implementazione dipende del file system distribuito, ci sono alcuni file system come AFS (Albert File System) dove bisogna installare un server ed un client, ed altri no. 4.2.3 Block device remoti via hardware Questa soluzione consiste nell’esportazione block device che sono collegati a dispositivi di rete; questi device hanno un particolare hardware e sono appositamente dedicati e fatti per la memorizzazione. Questa soluzione offre alte prestazioni ma è anche costosa. Ci sono 3 principali tecnologie che sono i più usati. 4.2.3.1 iSCSI iSCSI è un protocollo del livello applicazione che permette di trasportare i comandi SCSI su una rete che usa i protocolli TCP/IP. È un protocollo di incapsulamento: serve a trasportare un protocollo di alto livello, in questo caso il protocollo SCSI. iSCSI è stato standardizzato dal ’IETF in aprile 2004 e definito nel Request For Comments. iSCSI è basata su un paradigma di tipo Client-Server. Esiste un server chiamato target che esporta partizioni o dischi attraverso comandi SCSI ed un client chiamato 4.2. STORAGE 33 initiator che importa queste risorse sempre attraverso comandi SCSI. Per l’installazione via hardware ci sono appositi scatole con interfaccia ethernet che implementa il protocollo iSCSI, in questa scatola si inseriscono i dischi ed infine la si collega alla rete per poter essere utilizzata. 4.2.3.2 ATA OVER ETHERNET (AoE) Si tratta di protocollo di comunicazione di rete che usa le stesse norme di ethernet. Essendo prima di tutto destinato alle reti LAN e non all’Internet non si basa sui protocolli TCP/IP; ciò permette un guadagno in termini di performance, ma usa direttamente gli indirizzi MAC. Il vantaggio di questo tipo di funzionamento è la possibilità di utilizzare qualsiasi hardware conforme alle specificazione di Ethernet. Un semplice switch basta per connettere dischi AoE ai computer della rete. Il protocollo è basato su architettura client-server, esiste un server chiamato target che esporta le partizioni ed un client che li importa questi partizioni. 4.2.3.3 Fibre Chanel Fibre Chanel è un protocollo che inizialmente era concepito per i supercomputer ma è diventato standard dei SAN (storage area network), permette di avere buone prestazioni in termini di efficienza. Per implementarlo basta collegare il dispositivo coll’interfaccia fibre chanel ai computer anche essi con interfaccia FC. 4.2.4 Block device remoti via software Questa soluzione consiste nell’esportazione di blocchi di partizioni nella rete a traverso software specifici, questo permette di avere buone prestazioni senza avere la necessita di possedere hardware. Vedremo 2 soluzioni che sono iSCSI e ATA over Ethernet 4.2.4.1 iSCSI Come si è spiegato in precedenza, il protocollo è basato su un architettura client-server, quindi per fare un implementazione bisogna installare il server ossia un target sul file server ed un client chiamato initiator sulle macchine fisiche. Il funzionamento di questo protocollo è semplice: Il target installato sul lato server esporta partizioni o blocchi a traverso la rete, ed l’ initiator installato sul lato client fa una scoperta di questi elementi con un processo specifico. L’installazione e la configurazione di iSCSI è descritta nell’appendice B. CAPITOLO 4. PROTOTIPO E TEST 34 4.2.4.2 ATA over ETHERNET (AoE) AoE è anche esso un protocollo basato su un’ architettura client-server, un target (server) che esporta risorse con appositi tools, ed un initiator (client) che li importa sempre con tools specifici. Per implementarlo bisogna installare il target sul file server ed l’ initiator sulle macchine fisiche. Il tool usato per l’esportazione si chiama Vblade, il funzionamento è analogo a quello di iSCSI, il target in questo caso Vblade esporta partizioni dal lato server e l’initiator fa una scoperta di questi partizioni. L’installazione e la modalità di uso di Vblade è descritta nell’appendice B. 4.3 TEST 4.3.1 Sistema dei test Sono stati utilizzati 3 macchine fisiche e un file server per effettuare i test, le tabelle 4.2 e 4.3 mostrano le caratteristiche di queste macchine. Processore Memoria Disco Connessione Rete Sistema Operativo Dual Pentium III 1GHz 256MB 210GB - RAID 5 Gigabit Ethernet Slackware Linux 10.2 - Kernel 2.6.15.6 Tabella 4.2: Caratteristiche file server Processore Memoria Disco Connessione Rete Sistema Operativo Intel Xeon a 3.12 Ghz 1GB 40GB Gigabit Ethernet Linux - Kernel 2.6.16-xen Tabella 4.4: Caratteristiche macchine fisiche Lo schema della figura 4.3 mostra la struttura con la quale sono stati effettuati i test. 4.3. TEST 35 Figura 4.3: Struttura del sistema dei test 4.3.2 Tools per i test 4.3.2.1 IOzone Iozone è un software di misurazione delle prestazione di un sistema storage, questo programma è stato utilizzato per realizzare i test, si può scaricarlo da questo indirizzo: http://iozone.org Per l’installazione basta compilarlo col commando : make ; make linux, per l’uso e le opzioni disponibili riferirsi alla documentazione inclusa. 4.3.2.2 Bonnie Bonnie è un altro benchmark che è stato utile per realizzare alcuni test non pesanti sulle macchine virtuali, si può trovarlo in questo indirizzo: http://texttuality. com/bonnie/, per installarlo bisogna compilarlo col commando: make, è inclusa una documentazione sull’uso e le opzioni disponibili. 4.3.3 test scalabilità In questi test si è voluto verificare il comportamento del prototipo in termini di scalibilità per i due protocolli iSCSI e AoE. Le macchine virtuali create in questi test 36 CAPITOLO 4. PROTOTIPO E TEST sono stai installato su partizioni LVM1 questa scelta è stata obbligatoria in quanto non è possibile fare partire macchine virtuali con Xen con partizioni “normali” questo ovviamente influisce sul rendimento ma è stato applicato la stessa cosa anche col protocollo iSCSI. Sono stati fatti alcuni rilevazione in funzione del numero di macchine virtuali impiegati: • carico del File server: Il carico del file server si ottiene col commando Uptime che da come risultato qualcosa del genere: 23:02:23 up 23 days, 23:25, 1 user, load average: 0.57, 0.57, 0.83 dove il load average indica il carico del lavoro, un punto di carico equivale a dire che la CPU ha lavoro a sufficienza per riempire il suo naturale ciclo di calcolo della durata di un secondo. Per dirla in altro modo, nell’arco di un secondo la CPU non ha tempo di eseguire un NOP, ossia un’istruzione vuota, che non fa nulla, che viene abitualmente "eseguita” nelle pause di elaborazione. Questa rilevazione ha l’obiettivo di darci un idea sull’andamento del carico del file server in funzione della crescita del numero delle macchine virtuali. • Throughput delle VM per le operazione di read e write con un job leggero: si prende la somma della velocità delle VM sia con iSCSI che AoE per le operazioPn ne di read e write.il troughput con n numero di macchine virtuali è uguale: i=1 Vi dove Vi è la velocità delle operazione con la macchina virtuale i. La media delle Pn velocità per n numero virtuali è data da Vn = i=1 Vi /N, quindi il troughput con N VM(Virtual Macchine) è Tn =Vn *N, se si aumenta il numero delle VM a m dove m => n abbiamo il troughput con m VM Tm =Vm *M; in teoria se il troughput è quello effettivo si dovrebbe avere Tn => Tm quindi Vn *N => Vm *M N => VVm cioè il rapporto fra il numero delle VM n con questo implica : 1 => M n il numero delle VM m deve essere maggiore o uguale al rapporto fra la velocità media con i rispettivi numero delle VM, questo ovviamente è una conseguenza del troughput effettivo. • Velocità media delle VM per avere un idea sul comportamento del insieme delle VM e vedere quanto scende e con che andatura questa velocità col crescere del numero delle VM. È stato usato una scala di numero di macchine virtuali che parte da 1 fino 20 e facendo rilevamenti sui i punti: 3,6,9,15, e 20 macchine. Si è lanciato in ogni macchina un job leggero e si sono rilevati gli criteri precedentemente menzionati, questi test hanno l’obiettivo di testare la scalabilità dei due protocolli e di fare un confronto tra di loro. 1 Il gestore logico dei volumi (anche noto come logical volume manager o LVM) è un software di gestione dei dischi disegnato per essere più flessibile del normale partizionamento fisico 4.3. TEST 37 Oltre a grafici relativi alle misurazione dei termini sopra menzionanti e al confronto tra iSCSI e AoE in questi termini, si è anche prodotto grafici che rappresentano le distribuzioni delle macchine rispetto al tempo impiegato da questi ultimi a finire i test. I risultati ottenuti sono presentati in forma grafica di seguito. 4.3.3.1 iSCSI La figura 4.4 mostra il grafico che rappresenta il troughput prodotto per le operazione di write e di read nei vari test, come si può vedere c’ è un irregolarità. Il valore del troughput con una sola macchina in teoria dovrebbe corrispondere la capacita massima del canale di comunicazione che per tutti i test è stato un solo. Quindi questo valore dovrebbe rimanere uguale o diminuire aumentando il numero delle macchine virtuali ma come si vede nel grafo il troughput varia molto ed è irregolare. Questo fatto è probabilmente dovuto al fatto che il valore del troughput per una sola macchina o per un certo numero di macchine virtuali in cui il trougput è irregolare, non corrisponde alla capacita effettiva del canale, ovvero la velocità delle operazione sia di write che di read per queste macchine è inferiore alla velocità massima possibile. Figura 4.4: troughput per le operazione di read e write Da notare comunque anche nella figura 4.5 la dimunuzione delle velocità media di read e write, questo dimostra che esiste un certo limite per il numero delle macchine virtuali che possono essere presenti sullo stesso canale. La figura 4.6 e 4.7 mostrano le distribuzione delle VM rispetto ai tempi impiegati per svolgere i test di read e write, i test consistevano in un job che scrive e che legge su 38 CAPITOLO 4. PROTOTIPO E TEST Figura 4.5: velocità media delle VM per le operazione di read e write un file di dimensione di 300MB; come si vede per l’operazione di read ci sono 9 VM che hanno impiegato a finire l’operazione tra 3 e 4 ore, 5 VM tra 6 e 7, questa distribuzione è più o meno omogenea. Per la scrittura figura 4.7 invece c’è più omogenità in quanto ci sono solo 3 gruppi, 11 Vm che hanno fatto tra 2 e 3, 6 tra 3 e 4, e 3 tra 1 e 2. Figura 4.6: distribuzione delle VM per read Infine la figura 4.8 rappresenta il carico del file server in funzione del numero delle VM, come si può notare il carico cresce e quindi c’è un impiego crescente delle CPU col crescere del numero delle VM. 4.3. TEST 39 Figura 4.7: distribuzione delle VM per write Figura 4.8: Carico del file server 4.3.3.2 AoE Per il protocollo AoE si osserva nella figura 4.9 che il troughput diminuisce col crescere del numero delle VM sia per l’operazione di write che per l’operazione di read, per il write si vede una diminuzione più contenuta rispetto a quella con l’operazione. La diminuzione regolare del troughput dimostra comunque una diminuzione delle prestazioni col crescere del numero delle VM; questa perdita di efficienza è più grande per l’operazione di read. 40 CAPITOLO 4. PROTOTIPO E TEST Figura 4.9: Troughput delle operazione di read e write Nella figura 4.10 si vede la velocittà media delle VM per read e write, come si vede questa velocità diminuisce col aumentare delle VM, questo fatto mostra che esiste un valore che indica il numero delle VM in cui la velocità delle operazione potrebbe essere molto bassa e quindi un limite nella scala delle VM. Figura 4.10: Velocità media di read e write con aoe La figura 4.11 e 4.12 mostrano le distribuzione delle VM rispetto ai tempi impiegati per svolgere i test di read e write, i test sono gli stessi con iscsi; come si vede per 4.3. TEST 41 l’operazione di read ci sono 8 VM che hanno impiegato a finire l’operazione tra 3 e 5 ore, il resto delle VM hanno impiegato un tempo maggiore di 35 ore e ricordando che si trattava di un file di dimensione 300MB questo tempo è molto grande, in effetti la distribuzione è sparsa quindi esiste 2 gruppi di macchine virtuali con risultati diversi, un gruppo con risultato più o meno accettabile ed un altro con tempi molto lunghi e quindi non accettabili. Per la scrittura figura 4.12 invece c’è più omogenità in quanto anche se ci sono sempre 2 gruppi, la differenza fra i due gruppi è minore rispetto a quella che c’è per l’operazione di read. Figura 4.11: distribuzione delle VM per read Figura 4.12: distribuzione delle VM per write La figura 4.13 mostra che il carico del file server col crescere delle VM, si nota che non c’è grande cambiamento tra il carico per una macchina ed il carico per 20 macchine, infatti si passa da 1 a 2. Questo fatto è dovuto principalmente al fatto il 42 CAPITOLO 4. PROTOTIPO E TEST protocollo AoE che utilizza pochi livelli precisamente solo il livello MAC della pila dei protocolli TCP/IP, quindi i pacchetti AoE richiedono pochi manipolazioni e quindi impegnano meno la CPU. Figura 4.13: Carico del file server 4.3.3.3 Confronto dei risultati ed interpretazioni Nelle figure seguenti si è cercato di fare un confronto dei risultati tra il protocollo AoE e il protocollo iSCSI. Le figure 4.14 e 4.15 mostrano rispettivamente il confronto di troughput per le operazione di read e di write, come si può vedere per l’operazione di read il troughput ha lo stesso valore per una sola macchina virtuale per iSCSI e per AoE ma col crescere del numero delle VM il troughput di AoE diminuisce in maniera monotona invece per iSCSI il troughput ha un andatura irregolare, comunque con iSCSI si possiede un troughput molto maggiore di quello di AoE questo significa una velocità media più grande per iSCSI e quindi una maggiore scalabilità. Per l’operazione di write in figura 4.15 abbiamo più o meno gli stessi comportamenti dell’operazione di read, c’è una grande differenza di troughput tra i due protocolli, 4.3. TEST 43 Figura 4.14: Confronto sull’operazione di read il troughput maggiore per AoE si ottiene con una sola macchina ed è 4Mb/s invece per iSCSI si ottiene con 9 macchine ed è verso 10,5Mb/s, questa significa una velocità media più grande per iSCSI e quindi può fare funzionare più VM rispetto a AoE. Figura 4.15: Confronto sull’operazione di write Nella figura 4.16 si nota che esiste una grande differenza del carico del file sever tra i due protocolli, per il protocollo iSCSI si osserva un carico di lavoro che parte da 5 per 1 macchina virtuali e aumenta fino 8,5 per 20 VM, invece per il protocollo ATA il carico di lavoro varia da 1 per una macchina virtuali a 2 per 20 VM. Per entrambi i protocolli la variazione è poca anche se c’è una grande differenza tra di loro. Questo fatto può CAPITOLO 4. PROTOTIPO E TEST 44 essere spiegato come detto precedentemente il fatto che i pacchetti del protocollo AoE passano pochi livelli essendo AoE basato solo su MAC address rispetto ai pacchetti di iSCSI basato su TCP/IP Figura 4.16: Confronto sul carico del file server 4.3.4 Test I/O I test di I/O sono stati effettuati con il tools di Iozone, hanno l’obiettivo di fare un confronto tra i protocolli iSCSI e ATA in termini di efficienza. Si è lanciato un job pesante e si sono rilevati le velocità di alcune operazione tra cui READ e WRITE. 4.3.4.1 iSCSI La velocità dell’operazione effetiva si vede a partire della dimensione di file superiore al 256 MB perché non ci sono più effetti della cache e della memoria centrale che ha una dimensione di 256 MB. Si ha un valore che parte da più o meno per il write di 4096 kb/s e di 18Mb/s per il read. 4.3.4.2 ATA È stato usato sempre lo stesso file server di quello con iscsi. Nelle figure 4.19 e 4.20 si osserva che si ha per AoE un valore di velocità che inizia per il write di circa 4096 kb/s e di circa 16384 per il read. 4.3. TEST 45 Figura 4.17: Operazione di write Figura 4.18: Operazione di read 4.3.4.3 Confronto dei risultati ed interpretazione Si fa un confronto di rendimento tra i due protocolli, nelle figure 4.21 e 4.22 si mostrano un grafo 3d in cui si tiene conto della dimensione del file e della dimensione del record per misurare la velocità in kb/s ma come si vede la dimensione del record non influisce 46 CAPITOLO 4. PROTOTIPO E TEST Figura 4.19: Operazione di write Figura 4.20: Operazione di read sui risultati quindi teniamo conto solo della dimensione del file. Nelle figure 4.23 e 4.24 si vede il confronto tra iSCSI e Aoe per le operazioni di write e read, come si può notare la curva che rappresenta il protocollo iSCSI supera quella di AoE ad un certo punto; questo punto corrisponde nel punto in cui l’effetto 4.3. TEST 47 Figura 4.21: Confronto 3d sull’operazione di write Figura 4.22: Confronto 3d sull’operazione di read della cache e della memoria centrale non ci sono più. Si osserva che il protocollo iSCSI ha un rendimento circa 4096 kb/s più o meno uguale al 4/3 di quello di AoE circa 3000 kb/s. 48 CAPITOLO 4. PROTOTIPO E TEST Figura 4.23: Confronto 2d sull’operazione di write Figura 4.24: Confronto 2d sull’operazione di read 4.4. CONCLUSIONE 49 4.4 Conclusione I test per i storage sono stati effettuati solo per i protocolli iSCSI e AoE, si è voluto studiare, confrontare e capire i punti critici di questi protocolli. L’obiettivo di questi esperimenti era quello di identificare la possibilità per convenienza di un impiego di questi protocolli nel prototipo dell’alta dispnibilità basato sulla virtualizzazione del dipartimento di fisica. I test sono stati principalmente due tipi: alcuni test sulla scalabilità dei protocolli e un test sul rendimento di questi protocolli con una singola macchina. I primi test avevano l’obiettivo di studiare il comportamento dei protocolli con un numero crescente delle macchine virtuali, i test hanno evidenziato una differenza tra i due protocolli: il protocollo iSCSI ha un comportamento più omogeneo, col crescere del numero delle macchine virtuali le macchine virtuali hanno dimostrato di avere più o meno gli stessi prestazioni indipendentemente da quali macchina fisica sono presenti e da l’ordine in cui sono stati lanciati i jobs. Invece per AoE sono stati scontrati un comportamento che inizialmente è parso anomalo e inspiegabile, alcuni macchine precisamente 8 hanno impiegato per finire i jobs lanciati con un tempo più o meno uguale a quello con iSCSI, invece per 12 macchine i tempi sono stati molto lunghi. Si è scoperto dopo inversando l’ordine in cui sono stati lanciati i jobs cioè lanciando prima i jobs sulle macchine che prima avevano impiegato più tempo e dopo le altre macchine, i risultati hanno dimostrato che le 8 macchine con i jobs lanciati per primi hanno finiti per primi, questo fatto dimostra che l’ordine in cui sono stati lanciati influisce sui risultati ed imposta il numero 8, il numero massimo delle VM che possono eseguire jobs contemporaneamente su un unico canale per AoE. Naturalmente questo non significa che si possono usare solo 8 macchine virtuali per il protocollo AoE, ma 8 macchine è il numero massimo delle VM che possono interfacciarsi senza restare in attesa sullo stesso canale col file server. Per il secondo test che riguarda il rendimento i risultati hanno dimostrato che ci sono leggeremente delle differenze, i due protocolli hanno più o meno lo stesso rendimento fino a a quando c’è un file di dimensione uguale o inferiore alla dimensione della memoria disponibile; dopodiché il protocollo iSCSI ha un rendimento uguale quasi al doppio di quello di AoE. Una cosa molto importante che è stato notato con i test con job leggeri ma con più di una macchina virtuale è una differenza non trascurabile del carico del file server con iSCSI e con AoE, col protocollo iSCSI si ha un maggiore carico della CPU rispetto a AoE, con questo ultimo si ottiene un carico molto basso non superiore a 2 punti, ricordando che un punto equivale ad un impiego totale della CPU nel ciclo delle macchina questo significa che un impiego del file server con altre applicazioni per altri motivi nello stesso tempo che sono collegati le VM è possibile ed sfruttabile in quanto l’overhead è molto minore rispetto con iSCSI. 50 CAPITOLO 4. PROTOTIPO E TEST Appendice A Installazione e Utilizzazione di Xen A.1 Installazione e creazione delle VM L’installazione procede in questi stadi: 1. installazione di xen 2. configurazione del Grub e riavvio sul nuovo kernel A.1.1 installazione Si possono installare in due modi: A.1.1.1 Dai tarballs In questo caso sono disponibili Kernel precompilati. L’installazione si fa col ausilio di un script shell, che installa Xen e copia i Kernel predefiniti. Il vantaggio di questo metodo è che l’installazione è molto veloce, ma come questi Kernel sono generici non sono per forza adatti a tutte le distribuzione ( questo implica che il metodo non può funzionare dappertutto). Pre-built tarballs sono disponibili per il download dalla pagina XenSource downloads: http://www.xensource.com/downloads/ Una volta scaricati i tarball, scompattare ed installare con: • tar zxvf xen-3.0-install.tgz 51 52 APPENDICE A. INSTALLAZIONE E UTILIZZAZIONE DI XEN • cd xen-3.0-install • sh ./install.sh A.1.1.2 Dai sorgenti Questo metodo consiste la compilazione dei sorgenti, questa operazione prende molto tempo ma in compenso si ottiene migliore performance e sopratutto permette di scegliere le opzione necessari nei kernel. Si può trovare questi sorgenti sull’indirizzo. http://www.xensource.com/downloads/ È incluso un target “world” all’internet dei Makefile, questo target fa queste operazioni: • compila Xen • compila i tools di controllo, ed include xend • scarica (se necessario) e scompatta il sorgente Linux 2.6 per l’uso di Xen • compila il Linux Kernel da utilizzare come dominio 0. Per l’installazione basta fare: • make world • make install Un alternativa ai questi metodi sarebbe quella dell’installazione tramite package disponibile, ma questa soluzione è valida solo per pochi distribuzione tra cui Ubuntu e Federa core. Una volta fatto l’installato, bisogna configurare il boot loader od il programma che carica i sistemi operativi installati sulla macchina A.1.2 Configurazione del Grub Al avvio della macchina Il boot loader legge il file grub.conf o menu.lst che si trova nella cartella /boot/grub, e mostra in video i sistemi operativi indicati in questo file, l’utente sceglie poi il sistema da caricare. In questo file bisogna aggiungere questa voce: title Xen 3.0 / XenLinux 2.6 kernel /boot/xen-3.0.gz dom0_mem=262144 module /boot/vmlinuz-2.6-xen0 root=/dev/sda4 ro console=tty0 A.2. CONFIGURAZIONE DELLE MACCHINE VIRTUALI E USO DI XM 53 Dove la lignea del kernel indica il percorso dove trovare Xen, la lignea del module indica il percorso dei moduli per inizializzare il sistema. Bisogna riavviare la macchina e caricare il sistema XenLinux A.2 configurazione delle macchine virtuali e uso di xm A.2.1 configurazione dei domini Quando si vuole creare un nuovo dominio o una macchina virtuale bisogna editare un file di configurazione nel quale si indica i vari parametri del dominio che si vuole creare. Questo file ha una struttura di questo tipo. kernel = "/boot/kernel-2.6.12.6-xen" memory = 512 n name = "xen-test" disk = [’phys:/dev/sdb1,sda1,w’] root = "/dev/sda1 ro" vif = [’mac=00:00:00:00:02:07’] dhcp = "dhcp" kernel Il path al kernel per utilizzare. memory La memoria RAM da utilizzatore. name Il nome della macchina (se si usa il DHCP questo nome sarà cambiato in quello a fornito dal DHCP). disk Il block device in cui si trova il filesystem della macchina virtuale. root Punto di montaggio per la partizione radice vif si può indicare un address mac o un indirizzo IP dhcp indica l’utilizzo di un dhcp A.2.2 Utilizzo di Xen A.2.2.1 Si lancia Xen Il demone xend può essere avviato con il commando: xend start A.2.2.2 Comandi Xen Per eseguire comandi come la creazione, l’eliminazione, la migrazione, può essere usato ci si serve del tools xm, la struttura di comandi è di questo tipo. xm <comando> I comandi sono molti ne elenchiamo i più importanti 54 APPENDICE A. INSTALLAZIONE E UTILIZZAZIONE DI XEN xm list : lista le macchina virtuale esistenti nel sistema in questo formato Name macchinavirtuale1 macchinavirtuale2 macchinavirtuale3 ID 3 4 11 Mem(MiB) 512 512 256 VCPUs 1 1 2 State -b—-b—-r—- Times 234.2 256.4 4322.4 xm create <filediconfig>: fa partire una macchina con i dati inseriti nel file indicato. xm console <id o nome>: permette di connettersi a la macchina identificata dal id o dal nome indicato, il nome ed il id sono quelli dati dal commando xm list. xm shutdown <dom id> spegne la macchina indicato dal dominio. xm destroy <dom id> Distrugge la macchina virtuale col dominio indicato. xm reboot <dom id> Riavvia la macchina col dominio indicato. xm migrate <dom id> <host> Migra la macchina <dom id> all’host <host> (l’host di destinazione deve eseguire xen). xm migrate –live <dom id> <host> Migra la macchina indicato, senza interruzione, all’host indicato. A.3 Esempio di una creazione di una macchina virtuale ubuntu In questa sezione spiegammo come creare un dominio Ubuntu funzionante con Xen. Per prima creiamo un sistema base, cioè immagini di dischi dove sara installato il file system. • dd if=/dev/zero of=/home/xen/Ubuntu/image bs=1M count=2000 un altra immagine per lo swap di 128 MB • dd if=/dev/zero of=/home/xen/Ubuntu/swapimage bs=1M count=128 creazione del file system di tipo ext3 per il sistema operativo guest • mkfs.ext3 /home/xen/Ubuntu/image creazione del file system swap • mkfs.ext3 /home/xen/Ubuntu/swapimage A.3. ESEMPIO DI UNA CREAZIONE DI UNA MACCHINA VIRTUALE UBUNTU55 Adesso installiamo il sistema operativo: In un primo momento montiamo l’immagine del disco che abbiamo creato per installare il sistema operativo. creiamo un punto di montaggio • mkdir /mnt/ext lo montiamo nel punto creato con l’opzione loop non essendo la nostra immagine un disco fisico • mount -o loop /home/xen/Ubuntu/image /mnt/ext installiamo il sistema operativo con lo script debootstrap, che provvede a scaricare ed installare un sistema Ubuntu minimale. • debootstrap –arch i386 dapper /mnt/ext/ http://archive.ubuntulinux.org/ubuntu Lo script ha scaricato l’insieme di pacchetti necessari al installazione di sistema Ubuntu di base nel immagine creato, comunque qualche configurazione sono necessari prima di lanciare il sistema appena installato: Cambiamo la cartella root del sistema fisico per permettere le configurazione al sistema virtuale: • chroot /mnt/ext/ Editiamo il file /etc/fstab e definiamo le partizioni e i punti di montaggio utilizzati dalla macchina virtuale • vi /etc/fstab ed lo mettiamo in questo modo /dev/hda1 / ext3 defaults 0 0 /dev/hda2 none swap sw 0 0 proc /proc proc defaults 0 0 sys /sys sysfs defaults 0 0 Se vogliamo assegnare un indirizzo alle interfacce editiamo il file: • vi /etc/network/interfacce APPENDICE A. INSTALLAZIONE E UTILIZZAZIONE DI XEN 56 # Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or # /usr/share/doc/ifupdown/examples for more information. auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 abbiamo assegnato l’indirizzo 192.168.0.2 all’interffacia eth0 in questo esempio Assegnamo un nome alla nostra macchina: • echo macchinavirtuale > /etc/hostname Possiamo fare altre configurazione come il DNS o altro ma ci limitiamo a questo lasciando il resto per quando sarà necessario. Smontiamo l’immagine: • umount /mnt/ext Adesso dobbiamo configurare la macchina virtuale e farla partire, perciò editiamo un file: • vi /home/xen/ubuntu.cfg Inseriamo questi parametri: indica il kernel che sarà usato dalla macchina. • kernel = "/boot/xen-linux-2.6.12xenu" la memoria concessa • memory = 200 #nome • name = "ubuntu" Xen gestirà le interfacce non definiamo niente A.3. ESEMPIO DI UNA CREAZIONE DI UNA MACCHINA VIRTUALE UBUNTU57 • vif = [ ” ] • #dhcp = "dhcp" si indica le partizioni utilizzati dalla macchina virtuale • disk=[’file:/home/xen/Ubuntu/image,hda1,w’,’file:/home/xen/Ubuntu/swapeimage,hda2,w’, ] • root = "/dev/hda1 ro" Facciamola partire: • xm create ubuntu.cfg -c È la macchina è avviata. 58 APPENDICE A. INSTALLAZIONE E UTILIZZAZIONE DI XEN Appendice B iSCSI, ATA over ethernet, Iozone In questo appendice descriviamo come si fanno l’installazione e la configurazione dei software di esportazione e di importazione dei blocchi di dischi a traverso la rete, ATA over ethernet e iSCSI. B.1 ATA over ethernet Come abbiamo detto nel capitolo quattro, questo standard ha una architettura clientserver, quindi bisogna implementare sia un Client detto anche initiator che un Server detto Target. B.1.1 Target Il Target è un processo che permette di esportare i blocchi a traverso la rete, perchè una macchina sia da Target bisogna scaricare un tools chiamato Vblade, il sorgente può essere scaricato da questo indirizzo: http://sourceforge.net/project/ Una volta scaricato eseguire le istruzioni successive: • tar zxvf vblade-14.tar.gz • cd vblade-14 • make 59 APPENDICE B. ISCSI, ATA OVER ETHERNET, IOZONE 60 • make install Se non ci sono errori il tools è stato installato con successo, La strutturai del comando è: ./Vblade <shelf> <slot> <ethn> <device> dove: • <device> indica il disco o l’immagine da esporre • <ethn> indica l’interfaccia sul quale esporre i dischi • <shelf> e <slot> sono 2 identificatori di canali, i canali permettono di esportare più elementi in una unica interfaccia nello stesso tempo. vediamo un esempio di esportazione di un indagine di disco. 1. creiamo un immagine di 100MB col comando: dd if=/dev/zero of=immagine bs=1M count=100 2. lo formattiamo con: mkfs -t ext3 immagine 3. nella directory di Vblade diamo il commando: ./vblade 0 0 eth0 /path/immagine (./vbladed , per eseguire il processo in background), il risultato è di questo tipo: ioctl returned 0 10485760 bytes pid 10621: e0.0, 20480 sectors B.1.2 Initiator Per implementare il Client o l’Initiator bisogna avere un Kernel con il supporto AOE(ATA over Ethernet), per i Kernel di versione 2.6.12 o più recenti i moduli sono inclusi bisogna solo compilare ed installarli, per la compilazione del Kernel si può fare col comando make menuconfig nella directory del sorgente del Kernel. Invece per quelli antecedenti della versione 2.6.12 si può scaricare i moduli da questo indirizzo: http://linux.softpedia.com/get/System/Operating-Systems/Kernels/ATA-over-Ethernetdriver-8157.shtml Poi eseguire questi istruzioni: • tar zxvf aoe6.tar.gz • cd aoe6 B.1. ATA OVER ETHERNET 61 • make • make install Quindi bisogna scaricare tools chiamato aoetools, questi tools permettono di visualizzare i device esportati, possono essere scaricati da questo indirizzo: http://linux.softpedia.com/get/System/Networking/ATA-over-Ethernet-Tools-8123.shtm Poi eseguire queste istruzioni: • tar zxvf aoetools.tar.gz • cd aoetools • make • make install Una volta installato i moduli e tools, bisogna caricare i moduli co commando: • modprobe aoe Per vedere i blocchi mesi in rete si può dare il commando: • aoe-stat;aoe-discover Il risalutato dovrebbe essere di questo tipo: en.n 5.9G Infine per poter usare questi dispositivi basta montarli col commando: • mount /dev/etherd/en.n /path B.1.3 Alcuni problemi riscontrati B.1.3.1 Installazione del Target e Initiator Comunque i test che abbiamo effettuati con questo standard hanno evidenziato che L’Iniziatore ed il Target non possono essere sulla stessa macchina, perché l’initiator non riesce a scoprire i dispositivi esportati su un interfaccia che si trova sulla stessa macchina che esso gira. Questo perché l’initiator esegue una richiesta broadacast su tutte le interfacce della rete tranne quelle presenti sulla macchina sulla quale gira. La soluzione è ovviamente quella di installare il target ed il initiator su due macchine diverse. APPENDICE B. ISCSI, ATA OVER ETHERNET, IOZONE 62 B.1.3.2 Creazione dei VM da imagini sportati col standard ATA I test che abbiamo fatto creando macchine virtuali da imagini di dischi esportati in rete col standard ATA hanno dimostrato che le macchine virtuali create da queste imagini non partono. La soluzione sempre secondo i test è l’uso di imagini di tipo lvm(logical volume manage), o lsvm.... B.2 iSCSI Questo standard è basato anche esso su un architettura client-server, un target (server) e un initiator(client). B.2.1 Target Per installare il target bisogna scaricare il supporto per il Kernel ed installarlo, si può trovare questi moduli dal link successivo: http://iscsitarget.sourceforge.net/ si compila e si installa con le istruzione successive: • make KSRC=/usr/src/linux • make KSRC=/usr/src/linux install linux indica il sorgente del kernel col quale si vuole utilizzare. Una volta installato bisogna configurare il file di configurazione /etc/ietd.conf di cui il demone iscsi-target legge al suo avvio. B.2.1.1 configurazione /etc/ietd.conf questo file contiene i Target che devono essere eseguiti, ogni target indica le informazioni per un device di cui si vuole esportare, la struttura di un target è in questo modo: Target iqn.1997-01.it.infn:pg.na48fs3.xentest209 :indica la macchina sul quale si trova il target # Lun definition Lun 0 Path=/data16/images/209.img,Type=fileio :indica l’immagine o il disco da esportare B.2. ISCSI 63 Alias xentest209 :indica l’alias del target B.2.1.2 lancio del target Si lancia il target col commando: • /etc/init.d/iscsi-target start B.2.2 Initiator È necessario installare moduli iscsi e tools iscsi per fare funzionare l’initiator, i moduli si possono trovare sull’indirizzio: http://www.kernel.org/pub/linux/kernel/people/nab/iscsi-initiator-core/ Invece i tools si possono trovare sull’indirrizzio: http://www.kernel.org/pub/linux/utils/storage/iscsi/ Per installare i tools basta scompattare il sorgente e fare: make install, invece per i moduli: • make initiator KERNEL_DIR=/usr/src/linux • make install dove linux indica il sorgente del Kernel che si vuole utilizzare. Quindi bisogna configurare l’initiator, ci sono molti file che si possono configurare ma ci sono principalmente 2 necessari per il funzionamento del servizio perciò ci occuperemo solo di questi. B.2.2.1 Configurazione I 2 principali file sono: • /etc/sysconfig/initiator : in questo file ci si mette i target che si vuole fare richieste, la struttura dei voci è cosi: CHANNEL="0 1 eth0 192.168.254.54 3260 AuthMethod=None;MaxRecvDataSegmentLength=8192 nopout_timeout=5 iqn.1997-01.it.infn:pg.na48fs3.xentest208" Si indica il nome del target che si vuole fare richieste, l’interfaccia ed il canale dove fare questa richiesta. • /etc/initiatorname.iscsi : si inserisce il nome della macchina initiator col formato iqn(iscsi qualified name), è in questo modo: InitiatorName=iqn.1997-01.it.infn:pg.na48fs3 64 APPENDICE B. ISCSI, ATA OVER ETHERNET, IOZONE B.2.2.2 lancia l’initiator Per lanciarlo si esegue il commando: • /etc/init.d/initiator start Poi si esegue il commando: • /etc/init.d/initiator status Questo ultimo commando permette di fare vedere i dispositivi ISCSI disponibile in rete. Per utilizzarli questi dispositivi non bisogna altro che montarli in una directory ed è pronto. Bibliografia [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 65