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 une référence de performances 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'entraînement terminé, un récapitulatif détaillé s'affiche.
Exemple de résultats Fio
Les exemples suivants montrent un job d'écriture aléatoire 4k à thread unique s'exécutant 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
Pour en savoir plus sur les résultats de performances, consultez les lignes suivantes :
Latence :
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89La 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=120L'exemple précédent montre une moyenne de 2 000 IOPS. Cette valeur est attendue pour un job à 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.09Le 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. Cela dépend 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. La latence induite par la distance est le principal composant de la métrique.
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 des blocs et par le type d'opération (lecture ou é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 du bloc) pour les 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 sont disponibles 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 (blocksize) et iodepth (concurrency) pour les adapter à votre charge de travail. Les résultats sont disponibles dans la ligne iops.
Mesurer le débit
Le débit correspond aux IOPS multipliées par la taille des blocs. Pour mesurer le débit, utilisez l'un des onglets suivants en fonction de votre type de client :
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 les 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 une concurrence élevée.
Étapes suivantes
Consultez les benchmarks de performances.