Como configuro este pool do ZFS corretamente?

1

Resumo : Eu configurei um array RAIDZ de 4 HDDs com dois dispositivos de cache SSD, e não obtenho os resultados esperados no aumento do cache e no desempenho geral.Além disso, algumas coisas não são t parecem somar.

Plano de fundo e configuração : Estou configurando uma estação de trabalho de análise para pesquisa: Ryzen 7 1800X, 64 GB de RAM ECC, GFX 1080Ti, Tesla K40 (obrigado por isso, NVIDIA). Está definido para ser de propósito geral, haverá cálculos de CPU e GPU, e alguns dos conjuntos de dados consistem em arquivos muito grandes (50-100 arquivos, 10-30GB cada). Devido à paralelização, algumas vezes, algumas serão acessadas ao mesmo tempo. Há trabalhos intensivos em RAM, mas nem todos eles são, então há situações em que o ZFS terá muita memória RAM disponível, mas não o tempo todo (no entanto, o disco L2arc de 5 a 10 GB descrito abaixo estará bom).

Eu tenho 2x 2TB SDD (Samsung 850 Evo) e 4x 8TB HDD (WD Red). 3,5 TB dos SDDs será um RAID0, os restantes 2 * 250 GB poderão ser usados como cache para o ZFS. Para um primeiro teste, eu os adicionei como dois dispositivos de armazenamento em cache para um RAIDZ nos 4 HDDs.

Aqui está o layout:

# zpool status -v
[sudo] password for administrator: 
  pool: data
 state: ONLINE
  scan: none requested
config:

        NAME                                                 STATE     READ WRITE CKSUM
        data                                                 ONLINE       0     0     0
          raidz1-0                                           ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX                ONLINE       0     0     0
        cache
          ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1  ONLINE       0     0     0
          ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1  ONLINE       0     0     0

Medidas e saídas de comando : Gerei um arquivo aleatório (para contornar problemas de compressão) com um desempenho bastante bom:

# dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero) of=filename bs=1M count=100000 iflag=fullblock
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 199,795 s, 525 MB/s

Agora, o que eu esperava era que esse arquivo fosse para o cache (l2arc, AFAIU) se fosse acessado com frequência. No entanto, isso realmente não acontece (de maneira muito eficiente):

for i in 1 2 3 4;do dd if=filename of=/dev/null bs=1M iflag=fullblock;done
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 252,751 s, 415 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 215,769 s, 486 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 227,668 s, 461 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 224,469 s, 467 MB/s

Perguntas:

  1. Por que obtenho um desempenho menor de leitura do que de gravação? Não deveria escrever convergir para a velocidade de 3 discos e ler para a velocidade de 4 discos, como um RAID5?

  2. Por que não chuta o chute l2arc? Após várias leituras sem nenhum outro dado sendo lido, eu teria esperado um desempenho de leitura semelhante ao de 1 GB / s do SSID RAID0.

  3. Por que o zpool iostat reporta uma largura de banda de leitura tão baixa para os dispositivos individuais? Eu corri isso várias vezes (isso é da última corrida), e sempre é semelhante. Os discos rígidos apenas são adicionados a ~ 160MB / s, enquanto o dd informa mais de 400MB / s:

# zpool iostat -v
                                                        capacity     operations    bandwidth
pool                                                 alloc   free   read  write   read  write
---------------------------------------------------  -----  -----  -----  -----  -----  -----
data                                                  136G  28,9T  1,31K    152   167M  14,9M
  raidz1                                              136G  28,9T  1,31K    152   167M  14,9M
    ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX                    -      -    571     66  46,0M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X                    -      -    445     59  44,9M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX                    -      -    503     66  40,2M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX                    -      -    419     62  39,4M  5,18M
cache                                                    -      -      -      -      -      -
  ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1  34,0G   216G      1    266  8,23K  33,1M
  ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1  34,0G   216G      1    266  7,80K  33,0M
---------------------------------------------------  -----  -----  -----  -----  -----  -----

Há algo fundamentalmente errado aqui, ou eu entendi mal alguma coisa? Devo usar parte dos SSDs para o ZIL? Eu também poderia poupar algumas dezenas de GB do SSD OS M.2 para isso. Pelo menos se eu puder adicionar um dispositivo LVM, desde agora, tudo é reivindicado pela instalação do Kubuntu. Eu não fiz isso ainda, porque eu entendi isso só ajudaria com pequenas gravações sincronizadas, o que eu realmente não esperava. Principalmente, maior data será escrita de volta em série.

PS: Por que o cache se parece com um pool chamado cache, e não algo que pertence aos dados do pool? Eu usei

zpool add data cache [devices]

então ele deve pertencer ao pool de dados, não deveria?

    
por user23563 16.05.2017 / 14:15

1 resposta

1

desempenho RAIDZ1 vs. RAID5 convencional

Why do I get lower read than write performance? Shouldn't write converge to the speed of 3 discs and read to the speed of 4 discs, like a RAID5?

Veja este tópico em ServerFault :

RAIDZ with one parity drive will give you a single disk's IOPS performance, but n-1 times aggregate bandwidth of a single disk.

E este comentário:

I have a significant amount of experience with this, and can confirm for you that in most situations, RAIDZ is NOT going to outperform the same number of disks thrown into a traditional RAID5/6 equivalent array.

Seus discos podem sustentar cerca de 145 MB / s sequencialmente, então seus resultados teóricos devem ser de 435 MB / s. Eu diria que isso corresponde muito de perto aos seus resultados.

Cache L2ARC para leituras sequenciais

Why doesn't kick the l2arc kick in? After multiple reads with no other data being read, I would have expected a read performance similar to the 1GB/s of the SSD RAID0.

Dê uma olhada em esta postagem na lista de discussão :

Is ARC satisfying the caching needs?

e

Post by Marty Scholes Are some of the reads sequential? Sequential reads don't go to L2ARC.

Então, suas principais razões são:

  • Sua carga (aleatória) já é fornecida pelo ARC e o L2ARC não é necessário (porque seus dados eram sempre os mesmos e podem permanecer no ARC completamente). Idéia por trás disso: ARC é muito mais rápido que L2ARC (RAM vs. SSD), então sua primeira escolha para leituras é sempre ARC, você precisa de L2ARC apenas porque seus dados ativos são grandes demais para memória, mas o acesso ao disco aleatório é lento demais discos.
  • Seu benchmark foi de natureza sequencial e, portanto, não foi fornecido pela L2ARC. Idéia por trás disso: leituras seqüenciais envenenariam o cache, porque uma única leitura grande de arquivo preencheria o cache completamente e removeria milhões de pequenos blocos de outros usuários (o ZFS é otimizado para acesso aleatório simultâneo de muitos usuários), embora não tenha nenhum efeito sua velocidade na primeira leitura. Na segunda leitura, seria mais rápido, mas normalmente você não lê arquivos grandes duas vezes. Talvez você possa modificar o comportamento com os tuneables do ZFS.

Várias perguntas

Should I use part of the SSDs for ZIL?

Um dispositivo SLOG separado ajudará apenas para gravações sincronizadas aleatórias, nada mais. Para testar isso, é bastante simples: defina sua propriedade do sistema de arquivos de referência sync para disabled : zfs set sync=disabled pool/fs e, em seguida, faça o benchmark novamente. Se o seu desempenho for agora de repente ótimo, você será beneficiado. Se não mudar muito, você não vai.

PS: Why does cache look like a pool named cache, not something that belongs to the pool data?

Acho que é assim porque esses dispositivos extras (peças de reposição, caches, dispositivos de slog) também podem consistir em vários vdevs. Por exemplo, se você tem um dispositivo slog espelhado, você teria os mesmos 3 níveis, como o seu disco normal (log-mirror-disk1 / disk2).

    
por 17.05.2017 / 10:46