O desempenho do RAID-0 no Linux não aumenta em mais de 1 GB / s

8

Estou com problemas para obter o rendimento máximo da minha configuração. O hardware é o seguinte:

  • Processador AMD Opteron (tm) dual-core 2376
  • RAM de ECC DDR2 de 16 GB
  • controladores RAID Adaptec 52245 duplos
  • 48 unidades SATA de 1 TB configuradas como 2 matrizes RAID-6 (faixa de 256 KB) + peças de reposição.

Programas :

  • Kernel simples baunilha 2.6.32.25, compilado para AMD-64, otimizado para NUMA; Usuário do Debian Lenny.
  • os benchmarks executam: disktest, bonnie ++, dd, etc. Todos dão os mesmos resultados. Nenhuma discrepância aqui.
  • agendador io usado: noop. Sim, não há truque aqui.

Até agora, eu basicamente assumi que vários dispositivos físicos de distribuição (RAID 0) deveriam aumentar o desempenho aproximadamente linearmente. No entanto, este não é o caso aqui:

  • cada matriz RAID atinge cerca de 780 MB / s de gravação, sustentada, e 1 GB / s de leitura, sustentada.
  • gravar nas duas matrizes RAID simultaneamente com dois processos diferentes fornece 750 + 750 MB / s, e a leitura de ambos fornece 1 + 1 GB / s.
  • no entanto, quando eu divido as duas matrizes, usando mdadm ou lvm, o desempenho é de cerca de 850 MB / s de gravação e 1,4 GB / s de leitura. pelo menos 30% menos do que o esperado!
  • executar dois processos paralelos de gravador ou leitor em relação às matrizes listradas não melhora os números, na verdade, prejudica ainda mais o desempenho.

Então, o que está acontecendo aqui? Basicamente, descartei a contenção de barramento ou memória, porque quando executo dd em ambas as unidades simultaneamente, a velocidade de gravação agregada chega a 1,5 GB / se a velocidade de leitura atinge 2 GB / s.

Portanto, não é o barramento PCIe. Suponho que não é a RAM. Não é o sistema de arquivos, porque eu recebo exatamente os mesmos números de comparação com o dispositivo bruto ou usando o XFS. E também obtenho exatamente o mesmo desempenho usando as faixas LVM e md striping.

O que está errado? O que impede um processo de atingir o máximo rendimento possível? O striping do Linux está com defeito? Que outros testes eu poderia executar?

wazoox
fonte
Eu não entendo por que você está usando o RAID 6 + 0 aqui, por que você faria isso quando pode apenas usar RAID 1 + 0 regular?
Chopper3
Isso não vai resolver o problema. md / lvm compartilham o mesmo comportamento ao remover matrizes RAID-10. Estou cuidando da falta geral de desempenho, não de uma configuração específica. Este é um sistema de teste, não uma máquina de produção.
Whaox
5
suas raides 0 listras alinham-se com suas raides 6 listras? Geralmente, o RAID em camadas é uma área muito precária e não é aceitável supor que um determinado RAID agirá como se fosse um único disco rígido da mesma velocidade.
JamesRyan
1
você já tentou configurar as placas Adaptec como JBOD e executar o RAID-10 apenas em software (md)? não me surpreenderia se o recurso RAID do controlador fosse parcialmente tratado pelos drivers, negando qualquer vantagem de desempenho depois que você intercalar dois RAIDs diferentes. md, por outro lado, vai tentar o acesso otimizar a cada unidade de forma independente, aproaching vezes teóricas (se não há outro gargalo, é claro)
Javier
1
Isso não parece uma investigação fácil. À primeira vista, eu preferiria a possibilidade de o stripingprograma não ser capaz de executar através de um algoritmo multi-threading. Como você está usando o soft RAID mdadm, sugiro que você dê uma olhada na fonte.
e2-e4

Respostas:

3

Você tentou executar o latencytop enquanto fazia benchmarks? pode ser útil ver qual linux syscall é o culpado (se houver).

Andika Triwidada
fonte
2

Essa é uma placa PICe Gen 1 x8, até onde eu sei - a taxa de dados máxima absoluta que ela pode suportar é de 2 GBytes / s, assumindo zero despesas gerais. A própria Adaptec afirma apenas que os cartões podem suportar 1,2 Gbytes / s na melhor das hipóteses e você está excedendo isso.

Equipados com o RAID on Chip (RoC) de núcleo duplo líder do setor, conectividade x8 PCI Express e cache de 512 MB de DDR, eles fornecem mais de 250.000 IO por segundo e 1,2 GB / s.

Meu palpite é que, uma vez que você é capaz de exceder significativamente o desempenho reivindicado com dois conjuntos RAID 0 agindo independentemente da carga adicional, pequena e tudo o que pode ser, essa distribuição aumenta o que está sobrecarregando a CPU RAID ou, possivelmente, o subsistema RAM o controlador, em cargas GByte / s.

Helvick
fonte
1
Eu não entendo direito ... Como OP diz, parece-me que ele tem 2 controladores RAID, cada um manipulando uma matriz RAID6. Então ele RAID 0 é as duas matrizes RAID 6 em software, ie. usando o RAID do kernel incorporado do Linux. Nesse caso, cada controlador deve lidar apenas com metade da carga, portanto, cada controlador precisa apenas gravar 780 MB / se ler 1 GB / s. Os controladores já provaram que podem fazer isso (antes da adição do RAID do software). Portanto, o próprio barramento / controlador RAID PCI-Express não deve ser o fator limitante?
Jesper H
Ponto justo - perdeu o comentário do controlador duplo (e a parte lvm \ md que enfatizou isso). Seu argumento sobre o fato de não ser uma limitação de barramento \ IO é praticamente comprovado na época.
Helvick