Nesta página, descrevemos como verificar a performance do volume usando a ferramenta Fio. Para otimizar seus aplicativos, é importante estabelecer uma performance de referência para seus volumes.
Medir a performance do volume usando o Fio
Use a ferramenta de geração de E/S, Fio, para medir a performance de referência.
Como usar o Fio
O Fio aplica uma carga de trabalho que pode ser especificada por uma interface de linha de comando ou um arquivo de configuração. Enquanto é executado, o Fio mostra um indicador de progresso com a capacidade de processamento atual e os números de entrada e saída por segundo (IOPS). Após a conclusão, um resumo detalhado é exibido.
Exemplo de resultados do Fio
Os exemplos a seguir mostram um job de gravação aleatória de 4 mil com uma única linha de execução em execução por 60 segundos, que é uma maneira útil de medir a latência de referência. Nos comandos a seguir, o parâmetro --directory aponta para uma pasta com um compartilhamento de NetApp Volumes 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
Leia as linhas a seguir para mais detalhes sobre os resultados de performance:
Latência:
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89A latência média é de 495,96 microssegundos (usec), aproximadamente 0,5 ms, que é uma latência ideal.
IOPS:
min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120O exemplo anterior mostra uma média de 2.000 IOPS. Esse valor é esperado para um job de linha de execução única com latência de 0,5 ms (
IOPS = 1000 ms/0.5 ms = 2000).Capacidade de processamento:
bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09A média de capacidade de processamento é de 8002 KiBps, que é o resultado esperado para 2.000 IOPS com um tamanho de bloco de 4 KiB (
2000 1/s * 4 KiB = 8,000 KiB/s).
Medir a latência
A latência é uma métrica fundamental para a performance do volume. É um resultado das capacidades do cliente e do servidor, da distância entre o cliente e o servidor (seu volume) e do equipamento entre eles. O principal componente da métrica é a latência induzida pela distância.
É possível dar um ping no IP do volume para receber o tempo de retorno, que é uma estimativa aproximada da latência.
A latência é afetada pelo tamanho do bloco e se você está fazendo operações de leitura ou gravação. Recomendamos que você use os seguintes parâmetros para medir a latência de referência entre o cliente e um 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
Substitua os parâmetros rw (leitura/gravação/randread/randwrite) e bs (tamanho do bloco) para ajustar sua carga de trabalho. Tamanhos de bloco maiores resultam em latência mais alta, em que as leituras são mais rápidas do que as gravações. Os resultados podem ser encontrados na linha lat.
Medir IOPS
As IOPS são um resultado direto da latência e da simultaneidade. Use uma das guias a seguir com base no tipo de cliente para medir as 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
Substitua os parâmetros rw (leitura/gravação/randread/randwrite), bs (tamanho do bloco) e iodepth (simultaneidade) para ajustar sua carga de trabalho. Os resultados podem ser encontrados na linha iops.
Medir a capacidade de processamento
A capacidade de processamento é IOPS multiplicada pelo tamanho do bloco. Use uma das guias a seguir com base no tipo de cliente para medir a capacidade de processamento:
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
Substitua os parâmetros rw (leitura/gravação/randread/randwrite), bs (tamanho do bloco) e iodepth (simultaneidade) para ajustar sua carga de trabalho. Só é possível alcançar alta capacidade de processamento usando tamanhos de bloco de 64 mil ou maiores e alta simultaneidade.
A seguir
Analise os comparativos de mercado de performance.