Leistung prüfen

Auf dieser Seite wird beschrieben, wie Sie die Lautstärkeleistung mit dem Tool Fio überprüfen. Um Ihre Anwendungen zu optimieren, ist es wichtig, eine Baseline-Leistung für Ihre Mengen festzulegen.

Volumeleistung mit Fio messen

Verwenden Sie das E/A-Generatortool Fio, um die Referenzleistung zu messen.

Fio verwenden

Fio wendet eine Arbeitslast an, die Sie über eine Befehlszeilenschnittstelle oder eine Konfigurationsdatei angeben können. Während der Ausführung zeigt Fio eine Fortschrittsanzeige mit dem aktuellen Durchsatz und den Ein- und Ausgabevorgängen pro Sekunde (IOPS). Danach wird eine detaillierte Zusammenfassung angezeigt.

Beispiel für Fio-Ergebnisse

Die folgenden Beispiele zeigen einen Single-Thread-Job für zufällige 4K-Schreibvorgänge, der 60 Sekunden lang ausgeführt wird. Dies ist eine nützliche Methode zum Messen der Baseline-Latenz. In den folgenden Befehlen verweist der Parameter --directory auf einen Ordner mit einer bereitgestellten NetApp Volumes-Freigabe:

  $ 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

In den folgenden Zeilen finden Sie Details zu den Leistungsergebnissen:

  • Latenz: lat (usec): min=382, max=28001, avg=495.96, stdev=91.89

    Die durchschnittliche Latenz beträgt 495,96 Mikrosekunden (µs), also etwa 0,5 ms. Das ist eine ideale Latenz.

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

    Das vorherige Beispiel zeigt einen Durchschnitt von 2.000 IOPS. Dieser Wert wird für einen Single-Thread-Job mit einer Latenz von 0,5 ms (IOPS = 1000 ms/0.5 ms = 2000) erwartet.

  • Durchsatz: bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09

    Der durchschnittliche Durchsatz beträgt 8.002 KiB/s. Das ist das erwartete Ergebnis für 2.000 IOPS mit einer Blockgröße von 4 KiB (2000 1/s * 4 KiB = 8,000 KiB/s).

Latenz messen

Die Latenz ist ein grundlegender Messwert für die Volume-Leistung. Sie ist das Ergebnis von Client- und Serverfunktionen, der Entfernung zwischen Client und Server (Ihrem Volumen) und der dazwischenliegenden Ausrüstung. Die Hauptkomponente der Messung ist die durch die Entfernung verursachte Latenz.

Sie können die IP-Adresse Ihres Volumes anpingen, um die Round-Trip-Zeit zu ermitteln. Dies ist eine grobe Schätzung Ihrer Latenz.

Die Latenz wird durch die Blockgröße und die Art der Operation (Lesen oder Schreiben) beeinflusst. Wir empfehlen, die folgenden Parameter zu verwenden, um die Baseline-Latenz zwischen Ihrem Client und einem Volume zu messen:

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

Ersetzen Sie die Parameter rw (read/write/randread/randwrite) und bs (Blockgröße) entsprechend Ihrer Arbeitslast. Größere Blockgrößen führen zu einer höheren Latenz, wobei Lesevorgänge schneller als Schreibvorgänge sind. Die Ergebnisse finden Sie in der Zeile lat.

IOPS messen

IOPS sind ein direktes Ergebnis von Latenz und Parallelität. Verwenden Sie je nach Clienttyp einen der folgenden Tabs, um IOPS zu messen:

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

Ersetzen Sie die Parameter rw (read/write/randread/randwrite), bs (blocksize) und iodepth (concurrency) entsprechend Ihrer Arbeitslast. Die Ergebnisse finden Sie in der Zeile iops.

Durchsatz messen

Der Durchsatz ist das Produkt aus IOPS und Blockgröße. Verwenden Sie je nach Clienttyp einen der folgenden Tabs, um den Durchsatz zu messen:

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

Ersetzen Sie die Parameter rw (read/write/randread/randwrite), bs (blocksize) und iodepth (concurrency) entsprechend Ihrer Arbeitslast. Ein hoher Durchsatz ist nur mit Blockgrößen von mindestens 64 KB und hoher Parallelität möglich.

Nächste Schritte

Sehen Sie sich die Leistungsbenchmarks an.