En esta página, se describe cómo verificar el rendimiento del volumen con la herramienta Fio. Para optimizar tus aplicaciones, es importante establecer un rendimiento de referencia para tus volúmenes.
Cómo medir el rendimiento del volumen con Fio
Usa la herramienta de generación de E/S, Fio, para medir el rendimiento de referencia.
Cómo usar Fio
Fio aplica una carga de trabajo que puedes especificar a través de una interfaz de línea de comandos o un archivo de configuración. Mientras se ejecuta, Fio muestra un indicador de progreso con la capacidad de procesamiento actual y los números de entrada y salida por segundo (IOPS). Cuando finaliza, se muestra un resumen detallado.
Ejemplo de resultados de fio
En los siguientes ejemplos, se muestra un trabajo de escritura aleatoria de 4 K de un solo subproceso que se ejecuta durante 60 segundos, lo que constituye una forma útil de medir la latencia de referencia. En los siguientes comandos, el parámetro --directory apunta a una carpeta con un recurso compartido de NetApp Volumes activado:
$ 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
Lee las siguientes líneas para obtener detalles sobre los resultados del rendimiento:
Latencia:
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89La latencia promedio es de 495.96 microsegundos (µs), aproximadamente 0.5 ms, lo que representa una latencia ideal.
IOPS:
min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120En el ejemplo anterior, se muestra un promedio de 2,000 IOPS. Se espera ese valor para un trabajo de un solo subproceso con una latencia de 0.5 ms (
IOPS = 1000 ms/0.5 ms = 2000).Capacidad de procesamiento:
bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09El promedio de capacidad de procesamiento es de 8,002 KiB/s, que es el resultado esperado para 2,000 IOPS con un tamaño de bloque de 4 KiB (
2000 1/s * 4 KiB = 8,000 KiB/s).
Mide la latencia
La latencia es una métrica fundamental para el rendimiento del volumen. Es el resultado de las capacidades del cliente y del servidor, la distancia entre el cliente y el servidor (tu volumen) y el equipo intermedio. El componente principal de la métrica es la latencia inducida por la distancia.
Puedes hacer ping a la IP de tu volumen para obtener el tiempo de ida y vuelta, que es una estimación aproximada de tu latencia.
La latencia se ve afectada por el tamaño del bloque y por si realizas operaciones de lectura o escritura. Te recomendamos que uses los siguientes parámetros para medir la latencia de referencia entre tu cliente y un volumen:
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
Reemplaza los parámetros rw (lectura/escritura/lectura aleatoria/escritura aleatoria) y bs (tamaño del bloque) para que se ajusten a tu carga de trabajo. Los tamaños de bloque más grandes generan una mayor latencia, en la que las lecturas son más rápidas que las escrituras. Los resultados se encuentran en la fila lat.
IOPS de medición
Las IOPS son un resultado directo de la latencia y la simultaneidad. Usa una de las siguientes pestañas según tu tipo de cliente para medir las 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
Reemplaza los parámetros rw (lectura/escritura/lectura aleatoria/escritura aleatoria), bs (tamaño de bloque) y iodepth (simultaneidad) para que se ajusten a tu carga de trabajo. Los resultados se encuentran en la fila iops.
Cómo medir la capacidad de procesamiento
La capacidad de procesamiento son las IOPS multiplicadas por el tamaño del bloque. Usa una de las siguientes pestañas según tu tipo de cliente para medir el rendimiento:
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
Reemplaza los parámetros rw (lectura/escritura/lectura aleatoria/escritura aleatoria), bs (tamaño de bloque) y iodepth (simultaneidad) para que se ajusten a tu carga de trabajo. Solo puedes lograr un alto rendimiento con tamaños de bloque de 64 KB o más y una alta simultaneidad.
¿Qué sigue?
Revisa las comparativas de rendimiento.