In precedenza, ho trattato le nozioni di base sulle metriche e sui test del sottosistema di archiviazione nel mio articolo Analisi delle prestazioni del sottosistema di I/O per SQL Server, inclusa un'introduzione di CrystalDiskMark 4.0. CrystalDiskMark è stato recentemente riscritto per utilizzare Microsoft DiskSpd per i test, il che lo rende uno strumento ancora più prezioso per i test iniziali del sottosistema di archiviazione. DiskSpd fornisce la funzionalità necessaria per generare un'ampia varietà di modelli di richiesta del disco, che possono essere molto utili nella diagnosi e nell'analisi dei problemi di prestazioni di I/O con molta più flessibilità rispetto ai vecchi strumenti di benchmark come SQLIO. È estremamente utile per i test dei sottosistemi di archiviazione sintetici quando si desidera un livello di controllo maggiore rispetto a quello disponibile in CrystalDiskMark.
Ora ci addentreremo un po' più a fondo in come utilizzare effettivamente Microsoft DiskSpd per testare il sottosistema di archiviazione senza utilizzare CrystalDiskMark 4.0. Per fare ciò, dovrai scaricare e decomprimere DiskSpd. Per semplificare le cose, copio sempre il file eseguibile diskspd.exe desiderato dalla cartella eseguibile appropriata (amd64fre, armfre o x86fre) in un percorso breve e semplice come C:\DiskSpd
. Nella maggior parte dei casi vorrai la versione a 64 bit di DiskSpd dalla cartella amd64fre.
Una volta che hai il file eseguibile diskspd.exe disponibile, dovrai aprire un prompt dei comandi con diritti di amministratore (scegliendo "Esegui come amministratore"), quindi passare alla directory in cui hai copiato il file diskspd.exe.
Ecco alcuni dei parametri della riga di comando con cui vorrai iniziare:
Parametro | Descrizione |
-b | Dimensione del blocco dell'I/O, specificata come (K/M/G). Ad esempio –b8K indica una dimensione del blocco di 8 KB, rilevante per SQL Server |
-d | Durata del test in secondi. I test di 30-60 secondi sono generalmente abbastanza lunghi per ottenere risultati validi |
-o | I/O eccezionali (che significa profondità della coda) per destinazione, per thread di lavoro |
-t | Thread di lavoro per destinazione del file di test |
-h | Disabilita la memorizzazione nella cache del software a livello di sistema operativo e la memorizzazione nella cache di scrittura dell'hardware, che è una buona idea per testare SQL Server |
-r | Flag casuale o sequenziale. Se viene utilizzato –r vengono eseguiti test casuali, altrimenti vengono eseguiti test sequenziali |
-w | Scrivi percentuale. Ad esempio, –w25 significa 25% scritture, 75% letture |
-Z | La dimensione del buffer di origine di scrittura del test del carico di lavoro, specificata come (K/M/G). Utilizzato per fornire dati casuali per le scritture, che è una buona idea per i test di SQL Server |
-L | Acquisisci informazioni sulla latenza durante il test, che è un'ottima idea per testare SQL Server |
-c | Crea file di carico di lavoro della dimensione specificata, specificata come (K/M/G) |
Tabella 1:parametri della riga di comando di base per DiskSpd
Dovrai anche specificare la posizione del file di test e il nome del file per i risultati alla fine della riga. Ecco un esempio di riga di comando:
diskspd –b8K –d30 –o4 –t8 –h –r –w25 –L –Z1G –c20G T:\iotest.dat> DiskSpeedResults.txtQuesta riga di comando di esempio eseguirà un test di I/O casuale di 30 secondi utilizzando un file di test da 20 GB situato sull'unità T:, con un rapporto di scrittura e lettura del 75%, con una dimensione del blocco di 8K. Utilizzerà otto thread di lavoro, ciascuno con quattro I/O in sospeso e un seed del valore di entropia di scrittura di 1 GB. Salverà i risultati del test in un file di testo chiamato DiskSpeedResults.txt. Questo è un set di parametri abbastanza buono per un carico di lavoro OLTP di SQL Server.
Figura 1:esempio di riga di comando per DiskSpd
L'esecuzione del test inizia con un tempo di riscaldamento predefinito di cinque secondi (prima che le misurazioni inizino effettivamente), quindi il test effettivo verrà eseguito per la durata specificata in secondi con un tempo di raffreddamento predefinito di zero secondi. Al termine del test, DiskSpd fornirà una descrizione del test e i risultati dettagliati. Per impostazione predefinita, questo sarà un semplice riepilogo di testo in un file di testo utilizzando il nome del file che hai specificato, che sarà nella stessa directory dell'eseguibile diskspd.
Ecco come appaiono i risultati per questo particolare test eseguito sulla mia workstation.
Figura 2:esempio di risultati del test DiskSpd
La prima sezione dei risultati fornisce l'esatta riga di comando utilizzata per il test, quindi specifica tutti i parametri di input utilizzati per l'esecuzione del test (che includono i valori predefiniti che potrebbero non essere stati specificati nella riga di comando effettiva ). Successivamente, i risultati del test vengono visualizzati a partire dal tempo di test effettivo, dal conteggio dei thread e dal conteggio del processore logico. La sezione CPU mostra l'utilizzo della CPU per ciascun processore logico, incluso il tempo utente e kernel, per l'intervallo di test.
La parte più interessante dei risultati del test viene dopo. Ottieni i byte totali, I/O totali, MB/secondo, I/O al secondo (IOPS) e la latenza media in millisecondi. Questi risultati sono suddivisi per ogni thread (quattro nel nostro caso), con sezioni separate nei risultati per Total IO, Read IO e Write IO. I risultati per ogni thread dovrebbero essere molto simili nella maggior parte dei casi. Piuttosto che concentrarmi inizialmente sui valori assoluti per ciascuna misurazione, mi piace confrontare i valori quando eseguo lo stesso test su diverse unità logiche (dopo aver modificato la posizione del file di test nella riga di comando), che consente di confrontare le prestazioni per ogni unità logica.
L'ultima sezione dei risultati del test è ancora più interessante. Mostra un'analisi percentile della distribuzione dei risultati del test di latenza a partire dal valore minimo in millisecondi fino al valore massimo in millisecondi, suddiviso per letture, scritture e latenza totale. I "nove" nella colonna %-ile si riferiscono al numero di nove, dove 3-nove significa 99,9, 4-nove significa 99,99, ecc. Il motivo per cui i valori per le righe percentili più alte sono gli stessi è perché questo test aveva un numero relativamente basso di operazioni totali. Se vuoi caratterizzare con precisione i percentili più alti, dovrai eseguire un test di durata maggiore che genera un numero maggiore di operazioni di I/O separate.
Quello che vuoi cercare in questi risultati è il punto in cui i valori fanno un grande salto. Ad esempio, in questo test possiamo vedere che il 99% delle letture aveva una latenza di 1,832 millisecondi o meno.
Figura 3:distribuzione dei risultati di latenza
Come puoi vedere, eseguire DiskSpd è in realtà piuttosto semplice una volta compreso cosa significano i parametri di base e come vengono utilizzati. Non solo puoi eseguire DiskSpd da una riga di comando vecchio stile, puoi anche eseguirlo usando PowerShell. DiskSpd fornisce anche informazioni molto più dettagliate di quelle ottenute da SQLIO. La parte più complicata dell'utilizzo di DiskSpd è l'analisi e l'interpretazione dei risultati, che tratterò in un prossimo articolo.