Teste de matrizes RAID de software para dispositivos NVMe usando a metodologia SNIA



Há alguns meses, enquanto trabalhavam no próximo projeto, os profissionais do nosso laboratório de pesquisa estudaram os discos e as soluções de software NVMe para encontrar a melhor opção para montar uma matriz de software.

Os resultados dos testes foram surpreendentemente desanimadores - o enorme potencial de velocidade dos discos NVMe não se correlacionou com o desempenho demonstrado dos produtos de software existentes.

Nossos desenvolvedores não gostaram. E eles decidiram escrever seu produto ... Um produto que os comerciantes subseqüentemente criaram com o nome RAIDIX ERA.

Hoje, mais de uma dúzia de empresas produzem servidores adaptados para o uso de unidades NVMe. O mercado de produtos que suportam e desenvolvem essa tecnologia tem um enorme potencial. No relatório analítico da G2M, são apresentados números bastante convincentes, convincentes de que este protocolo de transferência de dados dominará em um futuro próximo.


Gráfico do relatório G2M

Atualmente, um dos líderes na produção de componentes NVMe é a Intel. Foi no equipamento deles que realizamos testes para avaliar as capacidades dos produtos de software existentes para gerenciar um hardware "inovador".

Juntamente com nosso parceiro, Promobit (um fabricante de servidores e sistemas de armazenamento de dados sob a marca comercial BITBLAZE), organizamos testes das unidades NVMe da Intel e do software comum para gerenciar esses dispositivos. O teste foi realizado de acordo com o método SNIA.

Neste artigo, compartilharemos os números obtidos durante o teste do sistema de hardware Intel NVMe, matrizes de software do MDRAID, Zvol sobre ZFS RAIDZ2 e, de fato, nosso novo desenvolvimento.

Configuração de hardware


Para a base da plataforma de teste, adotamos o sistema de servidor Intel Server System R2224WFTZS. Possui 2 soquetes para a instalação de processadores escaláveis ​​Intel Xeon e 12 canais de memória (24 DIMMs no total) DDR 4 com uma frequência de até 2666 MHz.

Mais informações sobre a plataforma do servidor podem ser encontradas no site do fabricante .

Todas as unidades NVMe conectadas através de 3 backplanes F2U8X25S3PHS .

No total, temos 12 unidades NVMe INTEL SSDPD2MD800G4 com firmware CVEK6256004E1P0BGN no sistema.

A plataforma do servidor foi equipada com dois processadores Intel® Xeon® Gold 6130 CPU a 2.10GHz com Hyper-Threading ativado, permitindo o lançamento de dois threads a partir de cada núcleo. Assim, na saída, recebemos 64 threads de computação.

Preparação do teste


Todos os testes neste artigo foram realizados de acordo com a especificação da metodologia SNIA SSS PTSe v 1.1. Inclusive, foi realizada uma preparação preliminar do armazenamento para obter um resultado estável e honesto.

O SNIA permite que o usuário defina os parâmetros para o número de threads e a profundidade da fila; portanto, configuramos 64/32, com 64 threads de computação em 32 núcleos.

Cada teste foi realizado em 16 rodadas para levar o sistema a um nível estável de indicadores e excluir valores aleatórios.

Antes de iniciar os testes, fizemos uma preparação preliminar do sistema:

  1. Instalando a versão do kernel 4.11 no CentOS 7.4.
  2. Desative C-STATES e P-STATES.
  3. Execute o utilitário admissão ajustado e defina o perfil de desempenho de latência.

O teste de cada produto e item foi realizado com as seguintes etapas:

Preparação de dispositivos de acordo com a especificação SNIA (dependente da carga e independente).

  1. Teste de IOps em blocos de 4k, 8k, 16k, 32k, 64k, 128k, 1m com variações de combinações de leitura / gravação 0/100, 5/95, 35/65, 50/50, 65/35, 95/5, 100/0 .
  2. Testes de latência com blocos de 4k, 8k, 16k com variações das combinações de leitura / gravação 0/100, 65/35 e 100/0. O número de encadeamentos e a profundidade da fila é 1-1. Os resultados são registrados como atrasos médios e máximos.
  3. Teste de produção com blocos de 128k e 1M, em 64 linhas de 8 equipes.

Começamos testando o desempenho, latência e taxa de transferência da plataforma de hardware. Isso nos permitiu avaliar o potencial do equipamento proposto e comparar com os recursos das soluções de software aplicadas.

Teste 1. Teste de Hardware


Para começar, decidimos ver do que uma unidade Intel DCM D3700 NVMe é capaz.
Na especificação, o fabricante declara os seguintes parâmetros de desempenho:
Leitura aleatória (100% de intervalo) 450.000 IOPS
Gravação aleatória (100% de intervalo) 88000 IOPS

Teste 1.1 Uma unidade NVMe. Teste de IOPS


Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k84017,891393.8117271.6133059.4175086.8281131.2390969.2
8k42602,645735,858980,267321.4101357.2171316.8216551.4
16k21618,822834,829703,633821.252552.689731,2108347
32k10929,411322147871681126577,647185.250670,8
64k5494,45671,67342,68285,813130,22388427249.2
128k2748,42805,23617,84295,26506,611997,613631
1m351,6354,8451,2684,8830,21574,41702,8

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Nesta fase, obtivemos resultados que não atingem exatamente os de fábrica. Provavelmente, o NUMA (o esquema de implementação da memória do computador usado nos sistemas multiprocessadores, quando o tempo de acesso à memória é determinado por sua localização em relação ao processador) desempenhou seu papel, mas, por enquanto, não prestaremos atenção a ele.

Teste 1.2 Uma unidade NVMe. Testes de atraso


Tempo médio de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k0,027190,0721340,099402
8k0,0298640,0930920,121582
16k0,0467260,1370160,16405

Tempo médio de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Tempo máximo de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k6,98504.71471,5098
8k7.00044.31181,4086
16k7.00684,64451.1064

Tempo máximo de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Teste 1.3 Taxa de transferência


A etapa final é avaliar a taxa de transferência. Aqui estão os seguintes indicadores:
Gravação sequencial de 1 MB - 634 MBps.
Leitura sequencial de 1 MB - 1707 MBps.
Gravação sequencial de 128Kb - 620 MBps.
Leitura sequencial de 128Kb - 1704 MBps.

Depois de lidar com uma unidade, passamos a avaliar toda a plataforma, que consiste em 12 unidades.

Teste 1.4 Sistema em 12 unidades. Teste de IOPS


Aqui, uma decisão forte foi tomada para economizar tempo e mostrar resultados apenas para trabalhar com o bloco 4k, que é de longe o cenário mais comum e indicativo para avaliar o desempenho.

Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k1363078.6156234519441052047612217647634413114202364

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Teste o sistema 1.5 em 12 unidades. Testes de largura de banda


Gravação sequencial de 1 MB - 8612 MBps.
Leitura sequencial de 1 MB - 20481 MBps.
Gravação sequencial de 128Kb - 7500 MBps.
Leitura sequencial de 128Kb - 20400 MBps.

Analisaremos os indicadores de desempenho de hardware obtidos novamente no final do artigo, comparando-os com os números do software testado nele.

Teste 2: Testando o MDRAID


Quando falamos sobre uma matriz de software, o MDRAID vem à mente primeiro. Lembre-se de que este é o RAID de software básico para Linux, que é distribuído gratuitamente.

Vamos ver como o MDRAID lida com o sistema de 12 discos proposto com um nível de matriz RAID 0. Todos nós entendemos que a criação de RAID 0 em 12 unidades requer coragem especial, mas agora precisamos desse nível de matriz para demonstrar os recursos máximos desta solução.

Teste 2.1 MDRAID. Teste RAID 0. IOPS


Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k10103961049306.61312401.41459698,61932776.82692752.82963943.6
8k513627,8527230.4678140771887.81146340.61894547.82526853.2
16k261087.4263638.8343679.2392655.2613912,81034843.21288299.6
32k131198.6130947.4170846.6216039.4309028.2527920.6644774.6
64k65083.465099.285257,2131005,6154839,8268425322739
128k32550,232718.243378,666999,878935.8136869,8161015.4
1m38023718,43233,43467,235466150,88193,2

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Teste 2.2 MDRAID. RAID 0. Testes de atraso


Tempo médio de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k0,030150,0675410.102942
8k0,032810,0821320.126008
16k0,0500580,1142780.170798

Tempo médio de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Tempo máximo de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k6,70423.72570,8568
8k6.59182.26010,9004
16k6.34662,77412.5678

Tempo máximo de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Teste 2.3 MDRAID. RAID 0. Testes de largura de banda


Gravação sequencial de 1 MB - 7820 MBPS.
Leitura sequencial de 1 MB - 20418 MBPS.
Gravação sequencial de 128Kb - 7622 MBPS.
Leitura sequencial de 128Kb - 20.380 MBPS.

Teste 2.4 MDRAID. RAID 6. Teste de IOPS


Vamos agora ver o que esse sistema possui no nível RAID 6.

Opções de criação de matriz
mdadm --create --verbose --chunk 16K / dev / md0 --level = 6 --raid-devices = 12 / dev / nvme0n1 / dev / nvme1n1 / dev / nvme2n1 / dev / nvme3n1 / dev / nvme4n1 / dev / nvme5n1 / dev / nvme8n1 / dev / nvme9n1 / dev / nvme10n1 / dev / nvme11n1 / dev / nvme6n1 / dev / nvme7n1

O volume total da matriz foi de 7450,87 GiB.

Iniciamos o teste após a inicialização preliminar da matriz RAID.

Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k39907.64284961609,878167,6108594,6641950.41902561.6
8k19474,420701,630316.439737,857051,6394072.21875791.4
16k10371.410979,21602220992,829955,6225157.41267495.6
32k8505,68824,81289616657,823823173261.8596857.8
64k5679,459318576,211137,215906,4109469.6320874.6
128k3976,84170,25974,27716,61099668124.4160453.2
1m768,8811,21177,815152149,64880,45499

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Teste 2.5 MDRAID. RAID 6. Testes de atraso


Tempo médio de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k0.1937020,1455650,10558
8k0,2665820,1866180,127142
16k0.4262940,2816670,169504

Tempo médio de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Tempo máximo de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k6.13064.54164.2322
8k6.24744.51973.5898
16k5.40745.58614.1404

Tempo máximo de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Vale ressaltar que aqui o MDRAID mostrou um nível muito bom de atrasos.

Teste 2.6 MDRAID. RAID 6. Testes de largura de banda


Gravação sequencial de 1 MB - 890 MBPS.
Leitura sequencial de 1 MB - 18800 MBPS.
Gravação sequencial de 128Kb - 870 MBPS.
Leitura sequencial de 128Kb - 10400 MBPS.

Teste 3. Zvol sobre ZFS RAIDZ2


O ZFS possui uma função interna de criação de RAID e um gerenciador de volume interno que cria dispositivos de bloco virtual, usados ​​por muitos fabricantes de armazenamento. Também aproveitaremos esses recursos criando um pool com proteção RAIDZ2 (análoga ao RAID 6) e um volume de bloco virtual em cima dele.

A versão 0.79 (ZFS) foi compilada. Opções de criação de matriz e volume:
ashift = 12 / compressão - desativada / desduplicação - desativada / tamanho do registro = 1M / atime = desativada / cachefile = nenhuma / Tipo RAID = RAIDZ2

O ZFS mostra resultados muito bons com o pool recém-criado. No entanto, com duplicação repetida, o desempenho é reduzido significativamente.

A abordagem SNIA é boa porque permite ver resultados reais de testes de sistemas de arquivos semelhantes (o baseado no ZFS) após substituições repetidas neles.

Teste 3.1 ZVOL (ZFS). RAIDZ2. Teste de IOps


Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k15719,615147,214190.215592,417965,644832,276314.8
8k15536,214929,415140,81655117898.844553,476187.4
16k16696,615937,215982,61735018546,244895,475549,4
32k11859,6109159698,210235,41126526741,838167.2
64k74446440,26313,26578,27465,614145,819099
128k4425,43785,64059,83859,44246,47143,410052,6
1m772730,2779,6784824,4995,81514,2

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Os números de desempenho são completamente inexpressivos. Ao mesmo tempo, o zvol puro (antes de reescrever) fornece resultados significativamente melhores (5 a 6 vezes mais). Aqui, o teste mostrou que, após a primeira cópia, o desempenho cai.

Teste 3.2 ZVOL (ZFS). RAIDZ2. Testes de atraso


Tempo médio de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k0,3328240,2552250,218354
8k0,32990,2590130,225514
16k0.1397380.1804670.233332

Tempo médio de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Tempo máximo de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k90,5569.971884,4018
8k91.621486.6109104.7368
16k108.219286.2194105.658

Tempo máximo de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Teste 3.3 ZVOL (ZFS). RAIDZ2. Testes de largura de banda


Gravação sequencial de 1 MB - 1150 MBPS.
Leitura sequencial de 1 MB - 5500 MBPS.
Gravação sequencial de 128Kb - 1100 MBPS.
Leitura seqüencial de 128Kb - 5300 MBPS.

Teste 4: RAIDIX ERA


Vejamos agora os testes do nosso novo produto - RAIDIX ERA.
Criamos o RAID6. Tamanho da faixa: 16kb. Após a conclusão da inicialização, execute o teste.

Resultado de desempenho (IOps) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k354887363830486865.6619349.4921403.62202384.84073187.8
8k180914.8185371249927.2320438.8520188.41413096.42510729
16k92115,896327,2130661.2169247.4275446.6763307.41278465
32k59994.261765.283512,8116562.2167028.8420216.4640418.8
64k27660,428229,838687,656603,876976214958.8299137.8
128k14475,81473020674,230358,840259109258.2160141.8
1m2892,83031,84032,86331,67514,81587119078

Resultado de desempenho (IOps) em forma gráfica. Mistura de leitura / gravação%.



Teste 4.2 RAIDIX ERA. RAID 6. Testes de atraso


Tempo médio de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k0,163340,1363970,10958
8k0,2070560,1633250,132586
16k0,3137740,2257670,182928

Tempo médio de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Tempo máximo de resposta (ms) em forma de tabela. Mistura de leitura / gravação%.
Tamanho do blocoR0% / W100%R65% / W35%R100% / W0%
4k5.3713.42443.5438
8k5.2433,74153.5414
16k7.6284,28914.0562

Tempo máximo de resposta (ms) em forma gráfica. Mistura de leitura / gravação%.



Atrasos são semelhantes aos produzidos pelo MDRAID. Porém, para conclusões mais precisas, uma estimativa dos atrasos sob uma carga mais séria deve ser realizada.

Teste 4.3 RAIDIX ERA. RAID 6. Testes de largura de banda


Gravação sequencial de 1 MB - 8160 MBPS.
Leitura sequencial de 1 MB - 19700 MBPS.
Gravação sequencial de 128Kb - 6200 MBPS.
Leitura sequencial de 128Kb - 19700 MBPS.

Conclusão


Como resultado dos testes, vale a pena comparar os números obtidos das soluções de software com o que a plataforma de hardware nos fornece.

Para analisar o desempenho da carga aleatória, compararemos a velocidade do RAID 6 (RAIDZ2) ao trabalhar com um bloco em 4k.
MD RAID 6RAIDZ2RAIDIX ERA RAID 6Hardware
4k R100% / W0%19025617631440731874.494.142
4k R65% / W35%108594179659214031823432
4k R0% / W100%3990715719354887958054



Para analisar o desempenho da carga serial, veremos o RAID 6 (RAIDZ2) com um bloco de 128k. Entre os threads, usamos um deslocamento de 10 GB para eliminar o acerto do cache e mostrar o desempenho real.
MD RAID 6RAIDZ2RAIDIX ERA RAID 6Hardware
128k seq read1040053001970020.400
128k seq write870110062007500



Qual é o resultado?


Matrizes RAID de software populares e acessíveis para trabalhar com dispositivos NVMe não podem mostrar o desempenho inerente ao potencial de hardware.

Aqui há uma necessidade muito óbvia de um software de controle que possa agitar a situação e mostrar que a simbiose de controle de programa com unidades NVMe pode ser muito produtiva e flexível.

Entendendo essa solicitação, nossa empresa criou um produto RAIDIX ERA, cujo desenvolvimento se concentrou na solução dos seguintes problemas:

  • Alto desempenho de leitura e gravação (vários milhões de IOps) em matrizes com Paridade no modo de mixagem.
  • Desempenho de streaming de 30 GBps, inclusive durante failover e recuperação.
  • Suporte para níveis RAID 5, 6, 7.3.
  • Inicialização e reconstrução em segundo plano.
  • Configurações flexíveis para diferentes tipos de carga (lado do usuário).

Hoje, podemos dizer que essas tarefas foram concluídas e o produto está pronto para uso.

Ao mesmo tempo, entendendo o interesse de muitas partes interessadas em tais tecnologias, preparamos para o lançamento não apenas uma licença paga, mas também uma licença gratuita , que pode ser totalmente usada para resolver problemas nas unidades NVMe e SSD.

Leia mais sobre o RAIDIX ERA em nosso site .

UPD Teste ZFS reduzido com tamanho de registro e tamanho de bloco de 8k


Tabela de opções do ZFS
NAMEPROPRIEDADEVALUEFONTE
tanquetamanho8Klocal
tanquecompressãoforapadrão
tanquededupforapadrão
tanquesoma de verificaçãoforalocal
tanquevolblocksize--
tanque / ataquetamanho--
tanque / ataquecompressãoforalocal
tanque / ataquededupforapadrão
tanque / ataquesoma de verificaçãoforalocal
tanque / ataquevolblocksize8kpadrão

A gravação piorou, a leitura é melhor.
Mesmo assim, todos os resultados são significativamente piores que outras soluções
Tamanho do blocoR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k13703,814399,820903,8256693161066955,2140849,8
8k1512616227,222393,627720,234274,867008139480.8
16k11111.211412.416980,820812,824680,248803.683710.4

Source: https://habr.com/ru/post/pt420837/


All Articles