In una struttura VMware, esistono tre differenti livelli di storage che astraggono i dischi fisici dello storage su su fino alla virtual machines (le immagini sono prese da un whitepaper per ESX 3, Recommendations for Aligning VMFS Partitions):
Ogni livello organizza le informazioni secondo le proprie logiche, e non sempre queste sono coerenti tra di loro. Una SAN potrà formattare lo spazio in blocchi da 128kb, VMFS formatterà la LUN che gli viene presentata in blocchi 64kb, e infine all’interno della VM il sistema operativo formatterà i dischi virtuali secondo sue logiche.
Il risultato, quasi sicuramente, è che i tre livelli non sono praticamente mai allineati tra di loro, e una lettura/scrittura di un singolo blocco a livello VM potrebbe interessare sullo storage fino a 3 blocchi:
Questo ovviamente porta a un degrado prestazionale, o quantomeno a un eccesso di I/O sullo storage non necessario. Se i tre livelli fossero allineati, avremmo una soluzione simile a questa:
dove quindi l’attività su un cluster a livello VM comporta l’uso di un solo blocco dello storage, massimizzando le prestazioni.
Il problema, spesso, non risiede nel VMFS, in quanto questo viene allineato in fase di creazione a 64k, il che è compatibile con la maggior pate degli storage vendor (è opportuno comunque verificare il proprio caso specifico).
Dove avviene il degrado quindi? Solitamente nel file system delle virtual machines. Ad esempio Windows effettua un allieamento differente a seconda del sistema operativo. Valutando i valori di NTFS con quelli di VMFS, ci possiamo accorgere che:
Windows 2003: allineamento a 32k, sopra a VMFS a 64k -> 32k / 64k = 0,5 -> Non allineato
Windows 2008: allineamento a 1024k, sopra a VMFS a 64k -> 1024k / 64k = 16 -> Allineato
E’ possibile ovviamente effetuare questa verifica anche per molti altri sistemi operativi: fintanto che il risultato della divisione non è una frazione, la partizione è allineata.
Quindi, se un Windows 2008 è già allineato (ATTENZIONE: solo le installazioni native, non eventuali aggiornamenti da sistemi precedenti!), ciò non vale per tutti gli altri.
Come è possibile verificare l’allineamento? Esistono diverse possbilità, anche se le due più comode sono:
– Vizioncore vOptimizer Wastefinder Utility
– da pochi giorni la spettacolare UBERAlign, creata da Nicholas Weaver.
Per capire cosa è in grado di fare UBERAlign, e le spettacolari funzioni che Nick ha inserito nel tool (completamente gratuito!), leggetevi il link che ho indicato. UBERAlign non solo è in grado di analizzare lo stato di allineamento delle VM, ma anche di procedere al loro allineamento stesso. Vi indico solo alcune delle funzioni più interessanti:
– gestisce partizioni linux e windows; anche i dischi C: che altri tool non supportano, primarie o estese, anche con lettere non convenzionali
– è in grado di liberare spazio disco mentre si effettua l’allineamento, ad esempio convertendo un disco da thick a thin
– gestisce fino a 6 job contemporanei
– effettua tutte le operazioni IN-PLACE, senza quindi dover creare copie dei dischi
– crea automaticamente delle snapshot delle VM prima di allineare, così se qualcosa va storto è sufficiente effettuare un revert
Sto installando l’applicazione (distribuita come virtual appliance + console) nel mio lab, a breve farò un articolo con dei casi reali!