Vérifier les performances

Cette page explique comment vérifier les performances des volumes à l'aide de l'outil Fio. Pour optimiser vos applications, il est important d'établir des performances de référence pour vos volumes.

Mesurer les performances des volumes à l'aide de Fio

Utilisez l'outil de génération 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 son exécution, Fio affiche un indicateur de progression avec le débit actuel et le nombre d'entrées et de sorties par seconde (IOPS). Une fois l'opération terminée, un résumé détaillé s'affiche.

Exemple de résultats Fio

Les exemples suivants montrent une tâche d'écriture aléatoire à thread unique de 4 Ko exécutée 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 correspond à une latence idéale.

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

    L'exemple précédent montre une moyenne de 2 000 IOPS. Cette valeur est attendue pour une tâche à thread unique 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

    Le débit moyen 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 des volumes. Elle résulte des capacités du client et du serveur, de la distance entre le client et le serveur (votre volume) et de l'équipement intermédiaire. 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 délai aller-retour, qui est une estimation approximative de votre latence.

La latence est affectée par la taille du bloc et par le fait que 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) en fonction de votre charge de travail. Les tailles de bloc plus importantes entraînent une latence plus élevée, où les lectures sont plus rapides que les écritures. Les résultats se trouvent dans 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 (taille de bloc) et iodepth (simultanéité) en fonction de votre charge de travail. Les résultats se trouvent dans la ligne iops.

Mesurer le débit

Le débit correspond aux IOPS multipliées 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 (taille de bloc) et iodepth (simultanéité) en fonction de votre charge de travail. Vous ne pouvez atteindre un débit élevé qu'en utilisant des tailles de bloc de 64 Ko ou plus et une simultanéité élevée.

Étape suivante

Consultez les benchmarks de performances.