Misurare gli indicatori del rendimento nel tuo ambiente

Questa pagina fornisce informazioni dettagliate su come misurare il rendimento in termini di volume.

Misurare il rendimento del volume utilizzando Fio

Utilizza lo strumento di generazione di input/output Fio per misurare il rendimento di riferimento.

Utilizzo di 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 valori correnti di throughput e 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 4K a thread singolo in esecuzione per 60 secondi, che è 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.89

    La latenza media è di 495,96 microsecondi (µs), circa 0,5 ms, che è 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à in Mbps: bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09

    La velocità in uscita media è 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 in termini di volume. È il risultato delle funzionalità del client e del server, della distanza tra il client e il server (il tuo volume) e delle apparecchiature intermedie. Il componente principale della metrica è la latenza indotta dalla distanza.

Puoi eseguire un ping sull'IP del volume per ottenere il tempo di percorrenza, che è una stima approssimativa della latenza.

La latenza è influenzata dalle dimensioni 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 riferimento 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 blocco) in base al tuo carico di lavoro. Dimensioni dei blocchi più grandi comportano una latenza più elevata, in cui 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 (blocksize) e iodepth (concurrency) in base al tuo carico di lavoro. I risultati sono disponibili nella riga iops.

Misurare la velocità effettiva

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

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 carico di lavoro. Puoi ottenere un throughput elevato solo utilizzando dimensioni dei blocchi pari o superiori a 64 KB e una concorrenza elevata.

Passaggi successivi

Esamina i benchmark di rendimento.