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?
striping
programa 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.