Valide o desempenho

Esta página fornece detalhes sobre como validar o desempenho do volume.

Meça o desempenho do volume com o Fio

Use a ferramenta de gerador de E/S, Fio, para medir o desempenho de base.

Usar o Fio

O Fio aplica uma carga de trabalho que pode especificar através de uma interface de linhas de comando ou de um ficheiro de configuração. Enquanto é executado, o Fio mostra um indicador de progresso com a taxa de transferência atual e os números de entrada e saída por segundo (IOPS). Após o fim, é apresentado um resumo detalhado.

Exemplo de resultados do Fio

Os exemplos seguintes mostram uma tarefa de escrita aleatória de 4k de thread único em execução durante 60 segundos, o que é uma forma útil de medir a latência de base. Nos comandos seguintes, o parâmetro --directory aponta para uma pasta com uma partilha de volumes do NetApp montada:

  $ 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 seguintes linhas para ver detalhes sobre os resultados de desempenho:

  • 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 2000 IOPS. Esse valor é esperado para uma tarefa de thread único com uma latência de 0,5 ms (IOPS = 1000 ms/0.5 ms = 2000).

  • Débito: bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09

    A média de débito é de 8002 KiBps, que é o resultado esperado para 2000 IOPS com um tamanho de bloco de 4 KiB (2000 1/s * 4 KiB = 8,000 KiB/s).

Medir latência

A latência é uma métrica fundamental para o desempenho do volume. É o resultado das capacidades do cliente e do servidor, da distância entre o cliente e o servidor (o seu volume) e do equipamento entre eles. O componente principal da métrica é a latência induzida pela distância.

Pode enviar um ping para o IP do volume para obter o tempo de resposta, que é uma estimativa aproximada da sua latência.

A latência é afetada pelo tamanho do bloco e se está a fazer operações de leitura ou escrita. Recomendamos que use os seguintes parâmetros para medir a latência de base entre o seu 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 adequarem à sua carga de trabalho. Os tamanhos de blocos maiores resultam numa latência mais elevada, em que as leituras são mais rápidas do que as escritas. Pode encontrar os resultados na linha lat.

Meça os IOPS

Os IOPS são o resultado direto da latência e da concorrência. Use um dos seguintes separadores com base no seu 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 (read/write/randread/randwrite), bs (blocksize) e iodepth (concurrency) para se adequarem à sua carga de trabalho. Pode encontrar os resultados na linha iops.

Meça o débito

A taxa de transferência é o número de IOPS multiplicado pelo tamanho do bloco. Use um dos seguintes separadores com base no seu 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 se adequarem à sua carga de trabalho. Só pode alcançar um débito elevado usando tamanhos de blocos de 64 KB ou superiores e uma elevada concorrência.

O que se segue?

Reveja as referências de desempenho.