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.