Questa pagina descrive come verificare le prestazioni del volume utilizzando lo strumento Fio. Per ottimizzare le tue applicazioni, è importante stabilire un rendimento di base per i tuoi volumi.
Misurare il rendimento del volume utilizzando Fio
Utilizza lo strumento di generazione I/O Fio per misurare le prestazioni di base.
Utilizzo di Fio
Fio applica un workload che puoi specificare tramite un'interfaccia a riga di comando o un file di configurazione. Durante l'esecuzione, Fio mostra un indicatore di avanzamento con i numeri di throughput e input e output al secondo (IOPS) correnti. Al termine, viene visualizzato un riepilogo dettagliato.
Esempio di risultati di Fio
I seguenti esempi mostrano un job di scrittura casuale a thread singolo da 4 k in esecuzione per
60 secondi, un modo utile per misurare la latenza di base. Nei seguenti
comandi, il parametro --directory punta a una cartella con una condivisione
NetApp Volumes montata:
$ FIO_COMMON_ARGS=--size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5
$ fio $FIO_COMMON_ARGS --directory=/netapp --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --name=nv
cvs: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.28
Starting 1 process
cvs: Laying out IO file (1 file / 10240MiB)
Jobs: 1 (f=1): [w(1)][100.0%][w=7856KiB/s][w=1964 IOPS][eta 00m:00s]
cvs: (groupid=0, jobs=1): err= 0: pid=1891: Wed Dec 21 14:56:37 2022
write: IOPS=1999, BW=7999KiB/s (8191kB/s)(469MiB/60001msec); 0 zone resets
slat (usec): min=4, max=417, avg=12.06, stdev= 5.71
clat (usec): min=366, max=27978, avg=483.59, stdev=91.34
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89
clat percentiles (usec):
| 1.00th=[ 408], 5.00th=[ 429], 10.00th=[ 437], 20.00th=[ 449],
| 30.00th=[ 461], 40.00th=[ 469], 50.00th=[ 482], 60.00th=[ 490],
| 70.00th=[ 498], 80.00th=[ 515], 90.00th=[ 529], 95.00th=[ 553],
| 99.00th=[ 611], 99.50th=[ 652], 99.90th=[ 807], 99.95th=[ 873],
| 99.99th=[ 1020]
bw ( KiB/s): min= 7408, max= 8336, per=100.00%, avg=8002.05, stdev=140.09, samples=120
iops : min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120
lat (usec) : 500=70.67%, 750=29.17%, 1000=0.15%
lat (msec) : 2=0.01%, 4=0.01%, 50=0.01%
cpu : usr=2.04%, sys=3.25%, ctx=120561, majf=0, minf=58
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,119984,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=7999KiB/s (8191kB/s), 7999KiB/s-7999KiB/s (8191kB/s-8191kB/s), io=469MiB (491MB), run=60001-60001msec
Leggi le seguenti righe per informazioni dettagliate sui risultati del rendimento:
Latenza:
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89La latenza media è di 495,96 microsecondi (usec), circa 0,5 ms, che è una latenza ideale.
IOPS:
min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120L'esempio precedente mostra una media di 2000 IOPS. Questo valore è previsto per un job a un solo thread con una latenza di 0,5 ms (
IOPS = 1000 ms/0.5 ms = 2000).Velocità effettiva:
bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09La media del throughput è 8002 KiBps, che è il risultato previsto per 2000 IOPS con una dimensione del blocco di 4 KiB (
2000 1/s * 4 KiB = 8,000 KiB/s).
Misurare la latenza
La latenza è una metrica fondamentale per il rendimento del volume. È il risultato delle funzionalità del client e del server, della distanza tra client e server (il tuo volume) e delle apparecchiature intermedie. Il componente principale della metrica è la latenza indotta dalla distanza.
Puoi eseguire il ping dell'IP del volume per ottenere il tempo di round trip, che è una stima approssimativa della latenza.
La latenza è influenzata dalle dimensioni del blocco e dal tipo di operazioni (lettura o scrittura). Ti consigliamo di utilizzare i seguenti parametri per misurare la latenza di base tra il client e un volume:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=randwrite \ --bs=4k --iodepth=1 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --name=latency
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=randwrite --bs=4k --iodepth=1 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --name=latency
Sostituisci i parametri rw (read/write/randread/randwrite) e bs (dimensione del blocco)
in base al tuo workload. Dimensioni dei blocchi maggiori comportano una latenza più elevata, dove le letture
sono più veloci delle scritture. I risultati sono disponibili nella riga lat.
Misurare gli IOPS
Gli IOPS sono il risultato diretto della latenza e della concorrenza. Utilizza una delle schede seguenti in base al tipo di client per misurare le IOPS:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=randread \ --bs=4k \ --iodepth=32 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --name=iops
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=randread --bs=4k --iodepth=32 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --numjobs=16 --name=iops
Sostituisci i parametri rw (read/write/randread/randwrite), bs (blocksize) e iodepth (concurrency) in base al tuo workload. I risultati sono disponibili nella
riga iops.
Misurare la velocità effettiva
Il throughput è il prodotto tra IOPS e dimensione del blocco. Per misurare il throughput, utilizza una delle seguenti schede in base al tipo di client:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=read \ --bs=64k \ --iodepth=32 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --numjobs=16 \ --name=throughput
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=read --bs=64k --iodepth=32 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --numjobs=16 --name=throughput
Sostituisci i parametri rw (read/write/randread/randwrite), bs (blocksize) e iodepth (concurrency) in base al tuo workload. Puoi ottenere un throughput elevato solo utilizzando dimensioni dei blocchi pari o superiori a 64 k e una concorrenza elevata.
Passaggi successivi
Esamina i benchmark di rendimento.