Misurare gli indicatori del rendimento nel tuo ambiente

Questa pagina fornisce informazioni dettagliate su come misurare il rendimento dei volumi.

Misurare il rendimento dei volumi utilizzando Fio

Utilizza lo strumento di generazione I/O, Fio, per misurare il rendimento di base.

Utilizzare Fio

Fio applica un carico di lavoro 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 corrente e di input e output al secondo (IOPS). Al termine, viene visualizzato un riepilogo dettagliato.

Esempio di risultati di Fio

Gli esempi seguenti mostrano un job di scrittura casuale di 4k a thread singolo in esecuzione per 60 secondi, un modo utile per misurare la latenza di base. Nei seguenti comandi, il parametro --directory rimanda a una cartella con una condivisione di 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.89

    La latenza media è di 495,96 microsecondi (usec), circa 0,5 ms, una latenza ideale.

  • IOPS: min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120

    L'esempio precedente mostra una media di 2000 IOPS. Questo valore è previsto per un job a thread singolo 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.09

    La media della velocità effettiva è di 8002 KiBps, 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 dei volumi. È il risultato delle funzionalità di client e 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 inviare un ping all'IP del volume per ottenere il tempo di round trip, che è una stima approssimativa della latenza.

La latenza è influenzata dalla dimensione del blocco e dal fatto che tu stia eseguendo operazioni di 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 carico di lavoro. Le dimensioni dei blocchi più grandi comportano una latenza maggiore, dove le letture sono più veloci delle scritture. I risultati sono disponibili nella riga lat.

Misurare le IOPS

Le IOPS sono il risultato diretto della latenza e della concorrenza. Utilizza una delle seguenti schede 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 (dimensione del blocco) e iodepth (concorrenza) in base al tuo carico di lavoro. I risultati sono disponibili nella riga iops.

Misurare la velocità effettiva

La velocità effettiva è il prodotto delle IOPS per la dimensione del blocco. Utilizza una delle seguenti schede in base al tipo di client per misurare la velocità effettiva:

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 (dimensione del blocco) e iodepth (concorrenza) in base al tuo carico di lavoro. Puoi ottenere una velocità effettiva elevata solo utilizzando dimensioni dei blocchi di 64k o superiori e una concorrenza elevata.

Passaggi successivi

Esamina i benchmark di rendimento.