En esta página se explica cómo verificar el rendimiento de los volúmenes.
Medir el rendimiento del volumen con Fio
Usa la herramienta de generación de E/S, Fio, para medir el rendimiento de referencia.
Usar Fio
Fio aplica una carga de trabajo que puedes especificar a través de una interfaz de línea de comandos o de un archivo de configuración. Mientras se ejecuta, Fio muestra un indicador de progreso con el rendimiento actual y los números de entrada y salida por segundo (IOPS). Cuando finalice, se mostrará 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 resulta útil para medir la latencia de referencia. En los siguientes comandos, el parámetro --directory
apunta a una carpeta con un recurso compartido de volúmenes de NetApp montado:
$ 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 información sobre los resultados de rendimiento:
Latencia:
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89
La latencia media es de 495,96 microsegundos (µs), aproximadamente 0,5 ms, lo que supone una latencia ideal.
IOPS:
min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120
En el ejemplo anterior se muestra una media de 2000 IOPS. Este valor es el esperado para un trabajo de un solo subproceso con una latencia de 0,5 ms (
IOPS = 1000 ms/0.5 ms = 2000
).Rendimiento:
bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09
El promedio de la tasa de transferencia es de 8002 KiBps, que es el resultado esperado de 2000 IOPS con un tamaño de bloque de 4 KiB (
2000 1/s * 4 KiB = 8,000 KiB/s
).
Medir la latencia
La latencia es una métrica fundamental para el rendimiento del volumen. Esto se debe a las funciones del cliente y del servidor, la distancia entre el cliente y el servidor (tu volumen) y el equipo que haya entre ellos. 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 utilices 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
Sustituye los parámetros rw
(lectura/escritura/lectura aleatoria/escritura aleatoria) y bs
(tamaño del bloque) para adaptarlos a tu carga de trabajo. Los tamaños de bloque más grandes dan lugar a una latencia mayor, donde las lecturas son más rápidas que las escrituras. Los resultados se encuentran en la fila lat
.
Medir las IOPS
Las IOPS son el resultado directo de la latencia y la simultaneidad. Usa una de las siguientes pestañas en función del 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
Sustituye los parámetros rw
(lectura, escritura, lectura aleatoria o escritura aleatoria), bs
(tamaño de bloque) y iodepth
(simultaneidad) para adaptarlos a tu carga de trabajo. Los resultados se encuentran en la fila iops
.
Medir el rendimiento
El rendimiento es el número de IOPS multiplicado por el tamaño de bloque. Para medir el rendimiento, use una de las siguientes pestañas en función de su tipo de cliente:
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
Sustituye los parámetros rw
(lectura, escritura, lectura aleatoria o escritura aleatoria), bs
(tamaño de bloque) y iodepth
(simultaneidad) para adaptarlos a tu carga de trabajo. Solo puedes conseguir un alto rendimiento con tamaños de bloque de 64 KB o más y una alta simultaneidad.
Siguientes pasos
Consulta las comparativas de rendimiento.