Por que o ZFS no Linux não consegue utilizar totalmente os SSDs de 8x na instância do AWS i2.8xlarge?

12

Sou completamente novo no ZFS, então, para começar, pensei em fazer alguns benchmarks simples para ter uma ideia de como ele se comporta. Eu queria aumentar os limites de seu desempenho e provisionar uma i2.8xlargeinstância do Amazon EC2 (quase US $ 7 / hora, tempo é realmente dinheiro!). Esta instância possui 8 SSDs de 800 GB.

Fiz um fioteste nos próprios SSDs e obtive a seguinte saída (aparada):

$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --direct=1 --filename=/dev/xvdb
[trimmed]
  write: io=67178MB, bw=229299KB/s, iops=57324, runt=300004msec
[trimmed]

57K IOPS para gravações aleatórias em 4K. Respeitável.

Em seguida, criei um volume ZFS com todos os 8. No começo, eu tinha um raidz1vdev com todos os 8 SSDs, mas li sobre os motivos pelos quais isso é ruim para o desempenho, então acabei com quatro mirrorvdevs, assim:

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi
$ sudo zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
testpool  2.91T   284K  2.91T         -     0%     0%  1.00x  ONLINE  -
  mirror   744G   112K   744G         -     0%     0%
    xvdb      -      -      -         -      -      -
    xvdc      -      -      -         -      -      -
  mirror   744G    60K   744G         -     0%     0%
    xvdd      -      -      -         -      -      -
    xvde      -      -      -         -      -      -
  mirror   744G      0   744G         -     0%     0%
    xvdf      -      -      -         -      -      -
    xvdg      -      -      -         -      -      -
  mirror   744G   112K   744G         -     0%     0%
    xvdh      -      -      -         -      -      -
    xvdi      -      -      -         -      -      -

Defino o tamanho do registro como 4K e executei meu teste:

$ sudo zfs set recordsize=4k testpool
$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --filename=/testpool/testfile --fallocate=none
[trimmed]
  write: io=61500MB, bw=209919KB/s, iops=52479, runt=300001msec
    slat (usec): min=13, max=155081, avg=145.24, stdev=901.21
    clat (usec): min=3, max=155089, avg=154.37, stdev=930.54
     lat (usec): min=35, max=155149, avg=300.91, stdev=1333.81
[trimmed]

Eu recebo apenas 52K IOPS neste pool do ZFS. Na verdade, isso é um pouco pior do que um SSD em si.

Não entendo o que estou fazendo de errado aqui. Eu configurei o ZFS incorretamente ou esse é um teste ruim do desempenho do ZFS?

Observe que estou usando a imagem oficial do CentOS 7 HVM de 64 bits, embora tenha atualizado para o kernel 4.4.5 elrepo:

$ uname -a
Linux ip-172-31-43-196.ec2.internal 4.4.5-1.el7.elrepo.x86_64 #1 SMP Thu Mar 10 11:45:51 EST 2016 x86_64 x86_64 x86_64 GNU/Linux

Instalei o ZFS a partir do repositório zfs listado aqui . Eu tenho a versão 0.6.5.5 do zfspacote.

ATUALIZAÇÃO : Por sugestão da @ ewwhite, tentei ashift=12e ashift=13:

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=12 -f

e

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=13 -f

Nenhum deles fez diferença. Pelo que entendi, os bits mais recentes do ZFS são inteligentes o suficiente para identificar SSDs 4K e usar padrões razoáveis.

No entanto, notei que o uso da CPU está aumentando. A Tim sugeriu isso, mas eu o rejeitei, mas acho que não estava assistindo a CPU por tempo suficiente para perceber. Há algo como 30 núcleos de CPU nesta instância, e o uso da CPU está aumentando até 80%. O processo de fome? z_wr_iss, muitas instâncias disso.

Confirmei que a compactação está desativada, portanto não é o mecanismo de compactação.

Eu não estou usando raidz, então não deve ser o cálculo da paridade.

Eu fiz um perf tope mostra a maior parte do tempo do kernel gasto _raw_spin_unlock_irqrestoredentro z_wr_int_4e osq_lockdentro z_wr_iss.

Agora acredito que há um componente de CPU nesse gargalo de desempenho, embora não esteja mais perto de descobrir o que pode ser.

ATUALIZAÇÃO 2 : Por sugestão da @ewwhite e de outras pessoas de que é a natureza virtualizada desse ambiente que cria incerteza no desempenho, eu costumava fiocomparar as gravações aleatórias em 4K espalhadas por quatro dos SSDs do ambiente. Cada SSD por si só fornece ~ 55K IOPS, então eu esperava algo em torno de 240K IO em quatro deles. Isso é mais ou menos o que eu tenho:

$ sudo fio --name randwrite --ioengine=libaio --iodepth=8 --rw=randwrite --bs=4k --size=398G --numjobs=8 --runtime=300 --group_reporting --filename=/dev/xvdb:/dev/xvdc:/dev/xvdd:/dev/xvde
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
...
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
fio-2.1.5
Starting 8 processes
[trimmed]
  write: io=288550MB, bw=984860KB/s, iops=246215, runt=300017msec
    slat (usec): min=1, max=24609, avg=30.27, stdev=566.55
    clat (usec): min=3, max=2443.8K, avg=227.05, stdev=1834.40
     lat (usec): min=27, max=2443.8K, avg=257.62, stdev=1917.54
[trimmed]

Isso mostra claramente que o ambiente, por mais virtualizado que seja, pode sustentar o IOPS muito mais alto do que o que estou vendo. Algo na maneira como o ZFS é implementado está impedindo que ele atinja a velocidade máxima. Eu simplesmente não consigo descobrir o que é isso.

anelson
fonte
Você está no EC2. Você obtém apenas o IOPS que a Amazon deseja oferecer.
Michael Hampton
A Amazon fornece cerca de 52K IOPS por SSD anexado a essa instância e há oito desses SSDs anexados. A partir dos documentos da Amazon, é clara que uma instância desse tamanho é a única instância em execução no host físico em que reside. Além disso, esses são SSDs locais, NÃO volumes EBS, portanto, não há outras cargas de trabalho disputando a largura de banda de E / S. Isso não explica o desempenho que estou vendo.
anelson
Isso está sobrecarregando a CPU ou atingindo os limites de memória?
Tim
Você leu esta série de artigos? hatim.eu/2014/05/24/… Algum outro artigo ajudou em tudo?
Tim
1
Apenas para descartar deficiências reais de implementação do zfsonlinux, tentaria o mesmo teste de bancada com uma instalação do Solaris 11 na mesma instância.
precisa

Respostas:

6

Esta configuração pode não estar bem ajustada. Existem parâmetros necessários para o arquivo /etc/modprobe/zfs.conf e o valor ashift ao usar SSDs

Tente ashift = 12 ou 13 e teste novamente.


Editar:

Ainda é uma solução virtualizada, por isso não sabemos muito sobre o hardware subjacente ou como tudo está interconectado. Não sei se você obterá melhor desempenho com esta solução.


Editar:

Acho que não vejo o ponto de tentar otimizar uma instância de nuvem dessa maneira. Porque se o melhor desempenho fosse o objetivo, você estaria usando hardware, certo?

Mas lembre-se de que o ZFS possui muitas configurações ajustáveis ​​e o que você obtém por padrão não está nem perto do seu caso de uso.

Tente o seguinte em seu /etc/modprobe.d/zfs.confe reinicie. É o que eu uso nos meus conjuntos de dados totalmente SSD para servidores de aplicativos. Seu ashift deve ser 12 ou 13. Benchmark com compressão = desativado, mas use compressão = lz4 na produção. Atime = off. Eu deixaria o tamanho do registro como padrão (128K).

options zfs zfs_vdev_scrub_min_active=48
options zfs zfs_vdev_scrub_max_active=128
options zfs zfs_vdev_sync_write_min_active=64
options zfs zfs_vdev_sync_write_max_active=128
options zfs zfs_vdev_sync_read_min_active=64
options zfs zfs_vdev_sync_read_max_active=128
options zfs zfs_vdev_async_read_min_active=64
options zfs zfs_vdev_async_read_max_active=128
options zfs zfs_top_maxinflight=320
options zfs zfs_txg_timeout=30
options zfs zfs_dirty_data_max_percent=40
options zfs zfs_vdev_scheduler=deadline
options zfs zfs_vdev_async_write_min_active=8
options zfs zfs_vdev_async_write_max_active=64
options zfs zfs_prefetch_disable=1
ewwhite
fonte
Ótima sugestão. Atualizei minha pergunta original com mais detalhes. Resumo: o ashift não ajudou, e acho que há um componente de uso da CPU para esse problema.
anelson
Você está usando compactação ou desduplicação?
ewwhite
Não, confirmei que a compactação está desativada zfs get compression. Dedupe também está desligado.
anelson
Esse é um ponto justo, mas posso mostrar que os dispositivos de armazenamento virtualizados subjacentes estão tendo um desempenho muito melhor. Veja a atualização 2 na postagem.
anelson
@anelson Okay. Experimente as configurações acima.
ewwhite
2

Parece provável que você esteja aguardando um bloqueio mutex do kernel Linux que, por sua vez, esteja aguardando um buffer de anel Xen. Não posso ter certeza disso sem acesso a uma máquina semelhante, mas não estou interessado em pagar à Amazon US $ 7 / hora por esse privilégio.

A redação mais longa está aqui: https://www.reddit.com/r/zfs/comments/4b4r1y/why_is_zfs_on_linux_unable_to_fully_utilize_8x/d1e91wo ; Prefiro estar em um lugar do que em dois.

Matthew Barnson
fonte
1

Passei um tempo decente tentando rastrear isso. Meu desafio específico: um servidor Postgres e eu quero usar o ZFS para seu volume de dados. A linha de base é o XFS.

Em primeiro lugar, minhas provações me dizem que ashift=12está errado. Se houver um ashiftnúmero mágico , não será 12. Estou usando 0e obtendo resultados muito bons.

Também experimentei várias opções de zfs e as que me dão os resultados abaixo são:

atime=off - Eu não preciso de horários de acesso

checksum=off - Estou tirando a roupa, não espelhando

compression=lz4- O desempenho é melhor com a compactação (compensação da CPU?)

exec=off - Isto é para dados, não executáveis

logbias=throughput - Leia nas interwebs que é melhor para o Postgres

recordsize=8k - 8k de tamanho de bloco específico para PG

sync=standard- tentou desativar a sincronização; não vi muito benefício

Meus testes abaixo mostram um desempenho melhor que o XFS (comente se você encontrar erros nos meus testes!).

Com isso, meu próximo passo é tentar o Postgres executando em um sistema de arquivos 2 x EBS ZFS.

Minha configuração específica:

EC2: m4.xlargeinstância

EBS: gp2volumes de 250 GB

kernel: Linux [...] 3.13.0-105-generic # 152-Ubuntu SMP [...] x86_64 x86_64 x86_64 GNU / Linux *

Primeiro, eu queria testar o desempenho bruto do EBS. Usando uma variação do fiocomando acima, criei o encantamento abaixo. Nota: Estou usando blocos de 8k, porque é isso que li nas gravações do PostgreSQL:

ubuntu@ip-172-31-30-233:~$ device=/dev/xvdbd; sudo dd if=/dev/zero of=${device} bs=1M count=100 && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=${device}
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.250631 s, 418 MB/s
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/13552KB/0KB /s] [0/1694/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=18109: Tue Feb 14 19:13:53 2017
  write: io=3192.2MB, bw=54184KB/s, iops=6773, runt= 60327msec
    slat (usec): min=2, max=805209, avg=585.73, stdev=6238.19
    clat (usec): min=4, max=805236, avg=1763.29, stdev=10716.41
     lat (usec): min=15, max=805241, avg=2349.30, stdev=12321.43
    clat percentiles (usec):
     |  1.00th=[   15],  5.00th=[   16], 10.00th=[   17], 20.00th=[   19],
     | 30.00th=[   23], 40.00th=[   24], 50.00th=[   25], 60.00th=[   26],
     | 70.00th=[   27], 80.00th=[   29], 90.00th=[   36], 95.00th=[15808],
     | 99.00th=[31872], 99.50th=[35584], 99.90th=[99840], 99.95th=[199680],
     | 99.99th=[399360]
    bw (KB  /s): min=  156, max=1025440, per=26.00%, avg=14088.05, stdev=67584.25
    lat (usec) : 10=0.01%, 20=20.53%, 50=72.20%, 100=0.86%, 250=0.17%
    lat (usec) : 500=0.13%, 750=0.01%, 1000=0.01%
    lat (msec) : 2=0.01%, 4=0.01%, 10=0.59%, 20=2.01%, 50=3.29%
    lat (msec) : 100=0.11%, 250=0.05%, 500=0.02%, 750=0.01%, 1000=0.01%
  cpu          : usr=0.22%, sys=1.34%, ctx=9832, majf=0, minf=114
  IO depths    : 1=0.1%, 2=0.1%, 4=100.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    : total=r=0/w=408595/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=3192.2MB, aggrb=54184KB/s, minb=54184KB/s, maxb=54184KB/s, mint=60327msec, maxt=60327msec

Disk stats (read/write):
  xvdbd: ios=170/187241, merge=0/190688, ticks=180/8586692, in_queue=8590296, util=99.51%

O desempenho bruto do volume EBS é WRITE: io=3192.2MB.

Agora, testando o XFS com o mesmo fiocomando:

Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/0KB/0KB /s] [0/0/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=17441: Tue Feb 14 19:10:27 2017
  write: io=3181.9MB, bw=54282KB/s, iops=6785, runt= 60024msec
    slat (usec): min=3, max=21077K, avg=587.19, stdev=76081.88
    clat (usec): min=4, max=21077K, avg=1768.72, stdev=131857.04
     lat (usec): min=23, max=21077K, avg=2356.23, stdev=152444.62
    clat percentiles (usec):
     |  1.00th=[   29],  5.00th=[   40], 10.00th=[   46], 20.00th=[   52],
     | 30.00th=[   56], 40.00th=[   59], 50.00th=[   63], 60.00th=[   69],
     | 70.00th=[   79], 80.00th=[   99], 90.00th=[  137], 95.00th=[  274],
     | 99.00th=[17024], 99.50th=[25472], 99.90th=[70144], 99.95th=[120320],
     | 99.99th=[1564672]
    bw (KB  /s): min=    2, max=239872, per=66.72%, avg=36217.04, stdev=51480.84
    lat (usec) : 10=0.01%, 20=0.03%, 50=15.58%, 100=64.51%, 250=14.55%
    lat (usec) : 500=1.36%, 750=0.33%, 1000=0.25%
    lat (msec) : 2=0.68%, 4=0.67%, 10=0.71%, 20=0.58%, 50=0.59%
    lat (msec) : 100=0.10%, 250=0.02%, 500=0.01%, 750=0.01%, 1000=0.01%
    lat (msec) : 2000=0.01%, >=2000=0.01%
  cpu          : usr=0.43%, sys=4.81%, ctx=269518, majf=0, minf=110
  IO depths    : 1=0.1%, 2=0.1%, 4=100.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    : total=r=0/w=407278/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=3181.9MB, aggrb=54282KB/s, minb=54282KB/s, maxb=54282KB/s, mint=60024msec, maxt=60024msec

Disk stats (read/write):
  xvdbd: ios=4/50983, merge=0/319694, ticks=0/2067760, in_queue=2069888, util=26.21%

Nossa linha de base é WRITE: io=3181.9MB; muito perto da velocidade do disco bruto.

Agora, no ZFS com WRITE: io=3181.9MBcomo referência:

ubuntu@ip-172-31-30-233:~$ sudo zpool create testpool xvdbd -f && (for option in atime=off checksum=off compression=lz4 exec=off logbias=throughput recordsize=8k sync=standard; do sudo zfs set $option testpool; done;) && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=/testpool/testfile; sudo zpool destroy testpool
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/41328KB/0KB /s] [0/5166/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=18923: Tue Feb 14 19:17:18 2017
  write: io=4191.7MB, bw=71536KB/s, iops=8941, runt= 60001msec
    slat (usec): min=10, max=1399.9K, avg=442.26, stdev=4482.85
    clat (usec): min=2, max=1400.4K, avg=1343.38, stdev=7805.37
     lat (usec): min=56, max=1400.4K, avg=1786.61, stdev=9044.27
    clat percentiles (usec):
     |  1.00th=[   62],  5.00th=[   75], 10.00th=[   87], 20.00th=[  108],
     | 30.00th=[  122], 40.00th=[  167], 50.00th=[  620], 60.00th=[ 1176],
     | 70.00th=[ 1496], 80.00th=[ 2320], 90.00th=[ 2992], 95.00th=[ 4128],
     | 99.00th=[ 6816], 99.50th=[ 9536], 99.90th=[30592], 99.95th=[66048],
     | 99.99th=[185344]
    bw (KB  /s): min= 2332, max=82848, per=25.46%, avg=18211.64, stdev=15010.61
    lat (usec) : 4=0.01%, 50=0.09%, 100=14.60%, 250=26.77%, 500=5.96%
    lat (usec) : 750=5.27%, 1000=4.24%
    lat (msec) : 2=20.96%, 4=16.74%, 10=4.93%, 20=0.30%, 50=0.08%
    lat (msec) : 100=0.04%, 250=0.03%, 500=0.01%, 2000=0.01%
  cpu          : usr=0.61%, sys=9.48%, ctx=177901, majf=0, minf=107
  IO depths    : 1=0.1%, 2=0.1%, 4=100.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    : total=r=0/w=536527/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=4191.7MB, aggrb=71535KB/s, minb=71535KB/s, maxb=71535KB/s, mint=60001msec, maxt=60001msec

Observe que isso teve um desempenho melhor que o XFS WRITE: io=4191.7MB. Tenho certeza de que isso se deve à compactação.

Para chutes, vou adicionar um segundo volume:

ubuntu@ip-172-31-30-233:~$ sudo zpool create testpool xvdb{c,d} -f && (for option in atime=off checksum=off compression=lz4 exec=off logbias=throughput recordsize=8k sync=standard; do sudo zfs set $option testpool; done;) && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=/testpool/testfile; sudo zpool destroy testpool
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/71936KB/0KB /s] [0/8992/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=20901: Tue Feb 14 19:23:30 2017
  write: io=5975.9MB, bw=101983KB/s, iops=12747, runt= 60003msec
    slat (usec): min=10, max=1831.2K, avg=308.61, stdev=4419.95
    clat (usec): min=3, max=1831.6K, avg=942.64, stdev=7696.18
     lat (usec): min=58, max=1831.8K, avg=1252.25, stdev=8896.67
    clat percentiles (usec):
     |  1.00th=[   70],  5.00th=[   92], 10.00th=[  106], 20.00th=[  129],
     | 30.00th=[  386], 40.00th=[  490], 50.00th=[  692], 60.00th=[  796],
     | 70.00th=[  932], 80.00th=[ 1160], 90.00th=[ 1624], 95.00th=[ 2256],
     | 99.00th=[ 5344], 99.50th=[ 8512], 99.90th=[30592], 99.95th=[60672],
     | 99.99th=[117248]
    bw (KB  /s): min=   52, max=112576, per=25.61%, avg=26116.98, stdev=15313.32
    lat (usec) : 4=0.01%, 10=0.01%, 50=0.04%, 100=7.17%, 250=19.04%
    lat (usec) : 500=14.36%, 750=15.36%, 1000=17.41%
    lat (msec) : 2=20.28%, 4=4.82%, 10=1.13%, 20=0.25%, 50=0.08%
    lat (msec) : 100=0.04%, 250=0.02%, 2000=0.01%
  cpu          : usr=1.05%, sys=15.14%, ctx=396649, majf=0, minf=103
  IO depths    : 1=0.1%, 2=0.1%, 4=100.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    : total=r=0/w=764909/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=5975.9MB, aggrb=101982KB/s, minb=101982KB/s, maxb=101982KB/s, mint=60003msec, maxt=60003msec

Com um segundo volume WRITE: io=5975.9MB, então ~ 1,8X as gravações.

Um terceiro volume nos fornece WRITE: io=6667.5MB, portanto, aproximadamente 2,1X das gravações.

E um quarto volume nos dá WRITE: io=6552.9MB. Para esse tipo de instância, parece que quase capto a rede EBS com dois volumes, definitivamente com três e não é melhor com 4 (750 * 3 = 2250 IOPS).

* Neste vídeo, verifique se você está usando o kernel 3.8+ linux para obter toda a qualidade do EBS.

berto
fonte
Resultados interessantes. Note que acho que você ficou confuso WRITE: io=; essa não é a velocidade, é a quantidade de dados gravados naquele tempo. Relacionado à velocidade apenas para testes com tempo de execução fixo, mas para consistência com outros benchmarks, é melhor focar no IOPS iops=,. No seu caso, os resultados são semelhantes Você provavelmente poderia melhorar muito se usar volumes IOPS EBS provisionados e uma instância maior. Consulte esta página para obter os limites esperados do EBS por tamanho de instância. Cuidado, as cobranças do EBS aumentam rapidamente se você não tomar cuidado!
anelson
Excelente feedback, obrigado @anelson! olhou para iops provisionados e eles são muito caros. No entanto, eu estava pensando em criar um pequeno volume de IOPs provisionados para um volume de log em que o ZIL é gravado e obtenha alguns benefícios de desempenho. Em algum lugar, li que o ZIL não cresce mais do que o que está na memória e eu o limito a 2G pol /etc/modules.d/zfs.conf. A próxima pergunta seria qual é o número apropriado de Iops para uma instância do ec2. Olhar para a página que você faz referência ainda é complicado, e eu não estou vendo um desempenho tão bom quanto o estado dos documentos.
21717