Misurare il benchmark di un disco

Si applica a: ✔️ Macchine ✔️ virtuali Linux Macchine virtuali ✔️ Windows Set di scalabilità flessibili Set di scalabilità ✔️ Uniform

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 strumenti di benchmarking nelle macchine virtuali che ospitano l'applicazione, è possibile determinare i livelli di prestazioni che l'applicazione può ottenere con ssd Premium. In questo articolo vengono forniti esempi di benchmarking di una macchina virtuale Standard_D8ds_v4 con DISCHI SSD Premium di Azure.

Sono stati usati rispettivamente strumenti comuni di benchmarking DiskSpd e FIO 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 aumentare la flessibilità per migliorare le prestazioni massime in una macchina virtuale a scalabilità elevata con SSD Premium per diversi tipi di carichi di lavoro dell'applicazione. Per altre informazioni su ogni strumento di benchmarking, visitare DiskSpd e FIO.

Per seguire gli esempi seguenti, creare un Standard_D8ds_v4 e collegare quattro SSD Premium alla macchina virtuale. Dei quattro dischi, configurare tre con memorizzazione nella cache host come "Nessuno" e 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. Usando questa configurazione, è possibile visualizzare le prestazioni massime di lettura e scrittura da una macchina virtuale Standard_D8ds_v4. Per informazioni dettagliate sulla creazione di un Standard_D8ds_v4 con SSD Premium, vedere Progettazione per prestazioni elevate.

Riscaldamento della cache

Il disco con la memorizzazione nella cache host ReadOnly è in grado di offrire operazioni di I/O al secondo superiore 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 risultati della cache sono maggiori operazioni di I/O al secondo dalla singola cache abilitata per il disco.

Importante

È necessario eseguire il riscaldamento della cache prima di eseguire i 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 seguente di parametri di base:

  • -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 destinazione 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, le dimensioni del blocco 4K vengono usate 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 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, non incluso il riscaldamento.
  • -Sh: disabilitare la memorizzazione nella cache di scrittura software e hardware (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 lavoratori di scrittura guidano il traffico nel volume "NoCacheWrites", che dispone di 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.

Per 3208642560 byte totali, massimo I/Os 391680, con un totale di 101.97 MiB/s e un totale di 13052.65 I/O al secondo.

IOPS massime di lettura

Viene usata una profondità di coda elevata pari a 128, una dimensione di blocco ridotta di quattro KB e quattro thread di lavoro per l'esecuzione delle operazioni di lettura. I lavoratori di lettura guidano il traffico nel 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.

Per 9652785152 byte totali, sono stati 2356637 totale I/Os, a 306.72 totali MiB/s e un totale di 78521.23 I/Os al secondo.

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 benchmark e preparare 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 lavoratori di scrittura guidano il traffico nel volume "nocache", con tre dischi con cache impostata su "Nessuno". I lavoratori di lettura guidano il traffico nel volume "readcache", con 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.
Il numero di macchine virtuali di I/O al secondo di scrittura e ssd Premium offre, mostra che le scritture sono 13.1k 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.
Screenshot del numero di vm di I/O al secondo di scrittura e unità SSD Premium, che mostra che le letture sono 78,6k.

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 combinate di lettura e scrittura. Ciò dipende da una combinazione delle prestazioni del disco e della cache.
Le operazioni di I/O al secondo di lettura e scrittura combinate mostrano che le letture sono 78,3k e le scritture sono 12,6k I/O al secondo.

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 il nostro 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.