6.2. Analisi
Una ottimizzazione corretta delle prestazioni per lo stack dello storage richiede una comprensione dei flussi dati nel sistema e dello storage sottostante, insieme al suo comportamento in presenza di diversi carichi di lavoro. Tale processo necessita altresì di una conoscenza del carico di lavoro da ottimizzare.
Quando implementate un nuovo sistema è consigliato tracciare un profilo dello storage dal basso verso l'alto. Iniziate con i dischi o LUN raw ed esaminatene le prestazioni usando un I/O diretto (I/O in grado di baipassare la cache della pagina del kernel). Questo è il test più semplice e rappresenterà lo standard per mezzo del quale verranno misurate le prestazioni I/O all'interno dello stack. Iniziate con un generatore del carico di lavoro di base (come ad esempio aio-stress) in grado di produrre processi di lettura e scrittura randomici sequenziali su una gamma di dimensioni I/O e code.
Di seguito viene riportato un grafico di una serie di esecuzioni aio-stress, ognuna delle quali esegue quattro fasi: scrittura sequenziale, lettura sequenziale, scrittura randomica e lettura randomica. In questo esempio lo strumento viene configurato per una esecuzione su una gamma di dimensioni (x axis) e profondità della coda (una per grafico). La profondità della coda rappresenta il numero totale di operazioni I/O in corso in un dato momento.
Figura 6.1. output aio-stress per 1 thread, 1 file
Da notare come la stringa dell'output netto vada dall'angolo sinistro in basso a quello destro in alto. Altresì, per una dimensione data, è possibile ottenere un output netto aggiuntivo dallo storage tramite l'aumento del numero di I/O in corso.
Eseguendo questi carichi di lavoro semplici con lo storage, sarà possibile comprendere le varie prestazioni dello storage stesso con un determinato carico di lavoro. Conservate i dati generati dai test per un confronto con carichi di lavoro più complessi.
Se desiderate utilizzare il device mapper o md, aggiungetelo e ripetete i test. Se notate una perdita sensibile di prestazioni assicuratevi che sia prevista e che possa essere spiegata. Per esempio, una perdita di prestazioni può essere prevista se aggiungete nello stack un livello raid di checksum. Al contrario una perdita di prestazioni non prevista può essere causata da operazioni I/O non allineate. Per impostazione predefinita Red Hat Enterprise Linux è in grado di allineare le partizioni e i metadati del device mapper in modo ottimale. Tuttavia non tutti i tipi di storage riportano il proprio allineamento ottimale e per questo motivo potrà essere necessaria una ottimizzazione manuale.
Dopo aver aggiunto un device mapper o md aggiungete un file system sopra al dispositivo a blocchi ed eseguitene il test usando un I/O diretto. Ancora una volta confrontate i risultati con i test precedenti ed assicuratevi di capire eventuali discrepanze. Direct-write I/O generalmente ha una migliore prestazione su file preassegnati, per questo motivo assicuratevi di preassegnare i file prima di eseguire una prova delle prestazioni.
Generatori del carico di lavoro sintetici utili includono:
- aio-stress
- iozone
- fio