Terrível (~ 1.4x vs esperado ~ 2x) desempenho de leitura aleatório no novo espelho ZFS (raid1)

4

Estou testando um espelho do ZFS usando o FIO (Flexible I / O tester) para entender a escalabilidade de leitura aleatória dos espelhos do ZFS. Os caches primários e secundários foram definidos como nenhum, pois o aplicativo que eu uso executa seu próprio armazenamento em cache.

Para fins de teste, estou usando discos magnéticos /dev/sdb e /dev/sdc com ~ 100 IOPS de leitura aleatória. As figuras de disco único foram obtidas da FIO ao usar uma montagem ZFS de disco único.

Meu entendimento do espelho do ZFS deve ser de aproximadamente 200 (100 + 100) IOPS de leitura aleatória. Ao testar, estou tendo apenas 140 IOPS de leitura aleatória. Os resultados completos estão abaixo:

test@pc:/mnt/zfs-raid1# fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=8 --runtime=240 --group_reporting

randread: (groupid=0, jobs=8): err= 0: pid=4293: Wed Nov 16 21:02:08 2016
  read : io=137040KB, bw=584482B/s, iops=142, runt=240091msec
    slat (usec): min=222, max=2246.9K, avg=56047.94, stdev=85252.98
    clat (usec): min=2, max=5142.9K, avg=838922.05, stdev=443521.12
     lat (msec): min=5, max=5401, avg=894.97, stdev=460.94
    clat percentiles (msec):
     |  1.00th=[   75],  5.00th=[  269], 10.00th=[  396], 20.00th=[  529],
     | 30.00th=[  619], 40.00th=[  693], 50.00th=[  766], 60.00th=[  848],
     | 70.00th=[  947], 80.00th=[ 1090], 90.00th=[ 1336], 95.00th=[ 1614],
     | 99.00th=[ 2507], 99.50th=[ 2835], 99.90th=[ 3720], 99.95th=[ 3884],
     | 99.99th=[ 4621]
    bw (KB  /s): min=    1, max=  851, per=12.92%, avg=73.67, stdev=43.13
    lat (usec) : 4=0.01%, 10=0.01%
    lat (msec) : 10=0.11%, 20=0.05%, 50=0.34%, 100=0.85%, 250=3.16%
    lat (msec) : 500=12.49%, 750=30.99%, 1000=26.12%, 2000=23.48%, >=2000=2.38%
  cpu          : usr=0.02%, sys=0.14%, ctx=99221, majf=0, minf=202
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=99.6%, 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.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=34260/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: io=137040KB, aggrb=570KB/s, minb=570KB/s, maxb=570KB/s, mint=240091msec, maxt=240091msec

O espelho foi criado usando:

zpool create zfs-raid1 mirror /dev/sdb /dev/sdc

Este é o nível de escalabilidade esperado? Ou há algo que estou perdendo?

    
por Greg 16.11.2016 / 11:50

1 resposta

3

O ZFS usa o ARC não apenas para o armazenamento em cache de arquivos, mas também para muitas otimizações de desempenho, como pré-busca e, provavelmente o mais importante, metadados. Se você não tiver nenhum cache, o ZFS precisará ler os metadados do conjunto todas as vezes que precisar, o que acontece de ser de leitura ou gravação.

Você pode armazenar em cache apenas metadados definindo primarycache=metadata em vez de primarycache=all .

No entanto, o ARC e o cache de nível de aplicativo não precisam ser mutuamente exclusivos. A pré-busca pode ajudar a acelerar as coisas também. Como tal, gostaria de testar como o desempenho muda com primarycache=all .

Este artigo também pode ser de interesse: link

    
por 16.11.2016 / 13:30