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

8

Tenho dificuldade em obter a taxa de transferência máxima da minha configuração. O hardware é como segue:

  • processador AMD Opteron (tm) quad-core duplo 2376
  • 16 GB de RAM ECC DDR2
  • controladores RAID duplos Adaptec 52245
  • 48 drives SATA de 1 TB configurados como 2 arrays RAID-6 (faixa de 256KB) + peças sobressalentes.

Software:

  • kernel Plain vanilla 2.6.32.25, compilado para AMD-64, otimizado para NUMA; Debian Lenny userland.
  • testes de desempenho: disktest, bonnie ++, dd, etc. Todos fornecem os mesmos resultados. Nenhuma discrepância aqui.
  • io scheduler usado: noop. Sim, nenhum truque aqui.

Até agora eu basicamente presumi que o striping (RAID 0) de vários dispositivos físicos deveria aumentar o desempenho de forma mais ou menos linear. 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 em arrays RAID simultaneamente com dois processos diferentes fornece 750 + 750 MB / s, e a leitura de ambos gera 1 + 1 GB / s.
  • no entanto quando distribuo os dois arrays juntos, 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 contra as matrizes distribuídas não aumenta os números, na verdade, ele degrada ainda mais o desempenho.

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

Portanto, não é o barramento PCIe. Eu suponho que não é a RAM. Não é o sistema de arquivos, porque eu obtenho exatamente o mesmo benchmarking de números contra o dispositivo bruto ou usando o XFS. E também obtenho exatamente o mesmo desempenho usando o striping e o md striping do LVM.

O que há de errado? O que está impedindo que um processo suba ao máximo possível? A distribuição do Linux está com defeito? Que outros testes eu poderia executar?

    
por wazoox 17.12.2010 / 16:23

2 respostas

3

Você já tentou executar latencytop ao fazer benchmarks? pode ser útil para ver qual linux syscall é o culpado (se houver).

    
por 23.12.2010 / 14:23
2

Isso é uma placa x8 PICe Gen 1, tanto quanto eu posso dizer - a taxa de dados máxima absoluta que poderia suportar é de 2GBytes / seg assumindo zero overheads. A própria Adaptec apenas reivindica que as placas podem suportar 1,2 Gbytes / seg na melhor das hipóteses e você está excedendo isso.

Equipped with industry-leading dual-core RAID on Chip (RoC), x8 PCI Express connectivity and 512MB of DDR cache, they provide over 250,000 IO per second and 1.2GB/s.

Meu palpite é que desde que você é capaz de exceder significativamente seu desempenho alegado com dois conjuntos RAID 0 agindo de forma independente a carga adicional, pequena e tudo é, que striping adiciona a isso é overstressing o CPU RAID, ou possivelmente o Subsistema RAM no controlador, a GByte / seg.

    
por 23.12.2010 / 14:41