Vérifier les performances

Cette page explique comment vérifier les performances d'un volume.

Mesurer les performances du volume à l'aide de Fio

Utilisez l'outil de générateur d'E/S, Fio, pour mesurer les performances de référence.

Utiliser Fio

Fio applique une charge de travail que vous pouvez spécifier via une interface de ligne de commande ou un fichier de configuration. Pendant l'exécution, Fio affiche un indicateur de progression avec le débit actuel, ainsi que les nombres d'entrées et de sorties par seconde (IOPS). Une fois l'analyse terminée, un récapitulatif détaillé s'affiche.

Exemple de résultats Fio

Les exemples suivants montrent une tâche d'écriture aléatoire de 4 ko exécutée sur un seul thread pendant 60 secondes, ce qui est un moyen utile de mesurer la latence de référence. Dans les commandes suivantes, le paramètre --directory pointe vers un dossier avec un partage NetApp Volumes installé:

  $ 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

Lisez les lignes suivantes pour en savoir plus sur les résultats de performances:

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

    La latence moyenne est de 495,96 microsecondes (µs), soit environ 0,5 ms, ce qui est une latence idéale.

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

    L'exemple précédent indique une moyenne de 2 000 IOPS. Cette valeur est attendue pour une tâche monothread avec une latence de 0,5 ms (IOPS = 1000 ms/0.5 ms = 2000).

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

    La moyenne du débit est de 8 002 Kio/s, ce qui correspond au résultat attendu pour 2 000 IOPS avec une taille de bloc de 4 Kio (2000 1/s * 4 KiB = 8,000 KiB/s).

Mesurer la latence

La latence est une métrique fondamentale pour les performances en termes de volume. Cela dépend des fonctionnalités du client et du serveur, de la distance entre le client et le serveur (votre volume) et de l'équipement situé entre les deux. Le composant principal de la métrique est la latence induite par la distance.

Vous pouvez envoyer un ping à l'adresse IP de votre volume pour obtenir le temps aller-retour, qui est une estimation approximative de votre latence.

La latence est affectée par la taille de bloc et si vous effectuez des opérations de lecture ou d'écriture. Nous vous recommandons d'utiliser les paramètres suivants pour mesurer la latence de référence entre votre client et 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

Remplacez les paramètres rw (read/write/randread/randwrite) et bs (taille de bloc) pour adapter votre charge de travail. Les tailles de blocs plus importantes entraînent une latence plus élevée, où les lectures sont plus rapides que les écritures. Les résultats s'affichent sur la ligne lat.

Mesurer les IOPS

Les IOPS sont le résultat direct de la latence et de la simultanéité. Utilisez l'un des onglets suivants en fonction de votre type de client pour mesurer les 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

Remplacez les paramètres rw (read/write/randread/randwrite), bs (blocksize) et iodepth (concurrency) pour adapter votre charge de travail. Les résultats se trouvent sur la ligne iops.

Mesurer le débit

Le débit correspond aux IOPS multipliés par la taille de bloc. Utilisez l'un des onglets suivants en fonction de votre type de client pour mesurer le débit:

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

Remplacez les paramètres rw (read/write/randread/randwrite), bs (blocksize) et iodepth (concurrency) pour adapter votre charge de travail. Vous ne pouvez obtenir un débit élevé qu'en utilisant des tailles de bloc de 64 ko ou plus et un niveau de concurrence élevé.

Étape suivante

Consultez les benchmarks de performances.