Misurare il benchmark di un disco
Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi
Il benchmarking è il processo di simulazione di diversi carichi di lavoro sull'applicazione e di misurazione delle prestazioni dell'applicazione per ogni carico di lavoro. Eseguendo la procedura illustrata nell'articolo sulla progettazione per prestazioni elevate sono stati raccolti i requisiti relativi alle prestazioni dell'applicazione. Eseguendo gli strumenti di benchmarking nelle macchine virtuali che ospitano l'applicazione, è possibile determinare i livelli di prestazioni che l'applicazione può ottenere con unità SSD Premium. In questo articolo vengono forniti esempi di benchmarking di una macchina virtuale Standard_D8ds_v4 di cui è stato effettuato il provisioning con unità SSD Premium di Azure.
Sono stati usati gli strumenti di benchmarking comuni DiskSpd e FIO, rispettivamente per Windows e Linux. Questi strumenti generano più thread che simulano un carico di lavoro analogo a quello di produzione e misurano le prestazioni del sistema. Questi strumenti consentono anche di configurare i parametri quali la dimensione dei blocchi e la profondità della coda, che in genere non possono essere modificati per un'applicazione. In questo modo è possibile ottenere maggiore flessibilità per migliorare le prestazioni massime in una macchina virtuale a scalabilità elevata di cui è stato effettuato il provisioning con unità SSD Premium per diversi tipi di carichi di lavoro dell'applicazione. Per altre informazioni su ogni strumento di benchmarking, vedere DiskSpd e FIO.
Per seguire gli esempi seguenti, creare un Standard_D8ds_v4 e collegare quattro UNITÀ SSD Premium alla macchina virtuale. Dei quattro dischi, configurare tre con memorizzazione nella cache dell'host come "Nessuno" ed eseguirne lo striping in un volume denominato NoCacheWrites. Configurare la memorizzazione nella cache dell'host come "ReadOnly" sul disco rimanente e creare un volume denominato CacheReads con questo disco. Con questa configurazione è possibile visualizzare le massime prestazioni di lettura e scrittura da una macchina virtuale Standard_D8ds_v4. Per informazioni dettagliate sulla creazione di un Standard_D8ds_v4 con unità SSD Premium, vedere Progettazione per prestazioni elevate.
Riscaldamento della cache
Il disco con la memorizzazione nella cache dell'host ReadOnly è in grado di offrire operazioni di I/O al secondo superiori rispetto al limite del disco. Per ottenere queste prestazioni di lettura massime dalla cache dell'host, è prima di tutto necessario preparare la cache del disco. Ciò assicura che le operazioni di I/O di lettura che lo strumento di benchmarking eseguirà sul volume CacheReads raggiungano effettivamente la cache e non direttamente il disco. I riscontri nella cache comportano un numero maggiore di operazioni di I/O al secondo dal singolo disco abilitato per la cache.
Importante
È necessario riscaldare la cache prima di eseguire benchmark ogni volta che la macchina virtuale viene riavviata.
DISKSPD
Scaricare lo strumento DISKSP nella macchina virtuale. DISKSPD è uno strumento che è possibile personalizzare per creare carichi di lavoro sintetici personalizzati. Verrà usata la stessa configurazione descritta in precedenza per eseguire test di benchmarking. È possibile modificare le specifiche per testare carichi di lavoro diversi.
In questo esempio viene usato il set di parametri di base seguente:
- -c200G: crea (o ricrea) il file di esempio usato nel test. Può essere impostato in byte, KiB, MiB, GiB o blocchi. In questo caso, viene usato un file di grandi dimensioni di 200-GiB per ridurre al minimo la memorizzazione nella cache della memoria.
- -w100: specifica la percentuale di operazioni che sono richieste di scrittura (-w0 equivale al 100% di lettura).
- -b4K: indica le dimensioni del blocco in byte, KiB, MiB o GiB. In questo caso, viene usata la dimensione del blocco 4K per simulare un test di I/O casuale.
- -F4: imposta un totale di quattro thread.
- -r: indica il test di I/O casuale (esegue l'override del parametro -s).
- -o128: indica il numero di richieste di I/O in sospeso per ogni destinazione per thread. Questa operazione è nota anche come profondità della coda. In questo caso, 128 viene usato per stressare la CPU.
- -W7200: specifica la durata del tempo di riscaldamento prima dell'avvio delle misurazioni.
- -d30: specifica la durata del test, senza includere il riscaldamento.
- -Sh: Disabilitare la memorizzazione nella cache di scrittura hardware e software (equivalente a -Suw).
Per un elenco completo dei parametri, vedere il repository GitHub.
IOPS massime di scrittura
Viene usata una profondità elevata della coda di 128, una dimensione di blocco ridotta di 8 KB e quattro thread di lavoro per l'esecuzione delle operazioni di scrittura. I ruoli di lavoro di scrittura guidano il traffico sul volume "NoCacheWrites", che ha tre dischi con cache impostata su "Nessuno".
Eseguire il comando seguente per 30 secondi di riscaldamento e 30 secondi di misurazione:
diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat
I risultati mostrano che la macchina virtuale Standard_D8ds_v4 offre il limite massimo di operazioni di I/O al secondo di scrittura pari a 12.800.
IOPS massime di lettura
Viene usata una profondità elevata della coda di 128, una dimensione di blocco ridotta di quattro KB e quattro thread di lavoro per l'esecuzione delle operazioni di lettura. I ruoli di lavoro di lettura guidano il traffico sul volume "CacheReads", con un disco con cache impostato su "ReadOnly".
Eseguire il comando seguente per due ore di riscaldamento e 30 secondi di misurazione:
diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat
I risultati mostrano che la macchina virtuale Standard_D8ds_v4 offre il limite massimo di operazioni di I/O al secondo di lettura pari a 77.000.
Velocità effettiva massima
Per ottenere la velocità effettiva massima di lettura e scrittura, è possibile passare a una dimensione di blocco maggiore di 64 KB.
FIO
FIO è uno strumento popolare per il benchmarking dell'archiviazione sulle VM Linux. Offre la flessibilità necessaria per selezionare diverse dimensioni di I/O e letture e scritture sequenziali o casuali. Genera thread di lavoro o processi per l'esecuzione delle operazioni I/O specificate. È possibile specificare il tipo di operazioni I/O che ogni thread di lavoro deve eseguire usando i file processo. È stato creato un file processo per ogni scenario illustrato negli esempi seguenti. È possibile cambiare le specifiche di questi file processo per il benchmarking di diversi carichi di lavoro in esecuzione sull'Archiviazione Premium. Negli esempi viene usato un Standard_D8ds_v4 che esegue Ubuntu. Usare la stessa configurazione descritta all'inizio della sezione del benchmark e scaldare la cache prima di eseguire i test di benchmark.
Prima di iniziare, scaricare FIO e installarlo nella macchina virtuale.
Eseguire il comando seguente per Ubuntu:
apt-get install fio
Vengono usati quattro thread di lavoro per la gestione delle operazioni di scrittura e quattro thread di lavoro per la gestione delle operazioni di lettura sui dischi. I ruoli di lavoro di scrittura guidano il traffico sul volume "nocache", che ha tre dischi con cache impostata su "Nessuno". I ruoli di lavoro di lettura guidano il traffico sul volume "readcache", che ha un disco con cache impostato su "ReadOnly".
IOPS massime di scrittura
Creare il file processo con le specifiche seguenti per ottenere il valore massimo per le operazioni IOPS di scrittura. Assegnare al file il nome "fiowrite.ini".
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4
[writer1]
rw=randwrite
directory=/mnt/nocache
Notare gli elementi chiave seguenti conformi alle indicazioni di progettazione illustrate nelle sezioni precedenti. Queste specifiche sono essenziali per ottenere il valore massimo per IOPS:
- Profondità della coda elevata pari a 256.
- Dimensione di blocco ridotta pari a 4 KB.
- Più thread che eseguono scritture casuali.
Eseguire il comando seguente per attivare il test FIO per 30 secondi:
sudo fio --runtime 30 fiowrite.ini
Durante l'esecuzione del test, è possibile visualizzare il numero di operazioni IOPS di scrittura gestite dalla macchina virtuale e dai dischi Premium. Come illustrato nell'esempio seguente, la macchina virtuale Standard_D8ds_v4 offre il limite massimo di operazioni di I/O al secondo di scrittura pari a 12.800 operazioni di I/O al secondo.
IOPS massime di lettura
Creare il file processo con le specifiche seguenti per ottenere il valore massimo per le operazioni IOPS di lettura. Assegnare al file il nome "fioread.ini".
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4
[reader1]
rw=randread
directory=/mnt/readcache
Notare gli elementi chiave seguenti conformi alle indicazioni di progettazione illustrate nelle sezioni precedenti. Queste specifiche sono essenziali per ottenere il valore massimo per IOPS:
- Profondità della coda elevata pari a 256.
- Dimensione di blocco ridotta pari a 4 KB.
- Più thread che eseguono scritture casuali.
Eseguire il comando seguente per attivare il test FIO per 30 secondi:
sudo fio --runtime 30 fioread.ini
Durante l'esecuzione del test, è possibile visualizzare il numero di operazioni IOPS di lettura gestite dalla macchina virtuale e dai dischi Premium. Come illustrato nell'esempio seguente, la macchina virtuale Standard_D8ds_v4 offre più di 77.000 operazioni di I/O al secondo di lettura. Ciò dipende da una combinazione delle prestazioni del disco e della cache.
IOPS massime di lettura e scrittura
Creare il file processo con le specifiche seguenti per ottenere il valore massimo per le operazioni IOPS combinate di lettura e scrittura. Assegnare al file il nome "fioreadwrite.ini".
[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4
[reader1]
rw=randread
directory=/mnt/readcache
[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200
Notare gli elementi chiave seguenti conformi alle indicazioni di progettazione illustrate nelle sezioni precedenti. Queste specifiche sono essenziali per ottenere il valore massimo per IOPS:
- Profondità della coda elevata pari a 128.
- Dimensione di blocco ridotta pari a 4 KB.
- Più thread che eseguono scritture e letture casuali.
Eseguire il comando seguente per attivare il test FIO per 30 secondi:
sudo fio --runtime 30 fioreadwrite.ini
Durante l'esecuzione del test, è possibile visualizzare il numero di operazioni IOPS combinate di lettura e scrittura gestite dalla macchina virtuale e dai dischi Premium. Come illustrato nell'esempio seguente, la macchina virtuale Standard_D8ds_v4 offre più di 90.000 operazioni di I/O al secondo di lettura e scrittura combinate. Ciò dipende da una combinazione delle prestazioni del disco e della cache.
Velocità effettiva massima combinata
Per ottenere la velocità effettiva massima combinata di lettura e scrittura, usare una dimensione di blocco superiore e una profondità della coda elevata con più thread che eseguono letture e scritture. È possibile usare una dimensione di blocco pari a 64 KB e una profondità della coda pari a 128.
Passaggi successivi
Procedere con l'articolo sulla progettazione per prestazioni elevate.
In questo articolo viene creato un elenco di controllo simile all'applicazione esistente per il prototipo. Usando gli strumenti di benchmarking è possibile simulare i carichi di lavoro e misurare le prestazioni nel prototipo dell'applicazione. Sarà quindi possibile determinare quale offerta di dischi può soddisfare o superare i requisiti relativi alle prestazioni per l'applicazione. Si potranno quindi implementare le stesse indicazioni per l'applicazione di produzione.