Verificar o desempenho

Nesta página, descrevemos como verificar o desempenho do volume usando a ferramenta Fio. Para otimizar seus aplicativos, é importante estabelecer um desempenho de referência para seus volumes.

Medir a performance de volume usando o Fio

Use a ferramenta geradora de E/S, Fio, para medir o desempenho da linha de base.

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 ele é 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). Depois que ele termina, um resumo detalhado é exibido.

Exemplo de resultados do Fio

Os exemplos a seguir mostram um job de gravação aleatória de 4k de uma única linha de execução em execução por 60 segundos, o 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 montado do NetApp Volumes:

  $ 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 saber mais sobre os resultados de performance:

  • Latência: lat (usec): min=382, max=28001, avg=495.96, stdev=91.89

    A latência média é de 495,96 microssegundos (usec), aproximadamente 0,5 ms, o que é uma latência ideal.

  • IOPS: min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120

    O exemplo anterior mostra uma média de 2.000 IOPS. Esse valor é esperado para um trabalho de uma única linha de execução 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.09

    A média de capacidade de processamento é de 8.002 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 o desempenho do volume. Isso é resultado das capacidades do cliente e do servidor, da distância entre eles (seu volume) e dos equipamentos intermediários. O principal componente da métrica é a latência induzida pela distância.

É possível fazer ping no IP do volume para receber o tempo de ida e volta, que é uma estimativa aproximada da latência.

A latência é afetada pelo tamanho do bloco e pelo tipo de operação (leitura ou gravação). Recomendamos usar 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 (read/write/randread/randwrite) e bs (tamanho do bloco) para se adequar à 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 seguintes guias com base no tipo de cliente para medir 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 (read/write/randread/randwrite), bs (blocksize) e iodepth (concurrency) para adequar à sua carga de trabalho. Os resultados podem ser encontrados na linha iops.

Medir a capacidade de processamento

A capacidade é IOPS multiplicados por tamanho do bloco. Use uma das seguintes guias com base no tipo de cliente para medir a taxa de transferência:

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 (read/write/randread/randwrite), bs (blocksize) e iodepth (concurrency) para adequar à sua carga de trabalho. Só é possível alcançar alta taxa de transferência usando tamanhos de bloco de 64k ou maiores e alta simultaneidade.

A seguir

Analise os comparativos de mercado de performance.