Operação mkfs leva muito tempo no Linux Software Raid 5

9

Configurei um nível 5 de invasão de software do Linux que consiste em discos de 4 * 2 TB. A matriz de disco foi criada com um tamanho de faixa de 64k e sem outros parâmetros de configuração. Após a reconstrução inicial, tentei criar um sistema de arquivos e essa etapa leva muito tempo (cerca de meia hora ou mais). Tentei criar um sistema de arquivos xfs e ext3, ambos demoraram muito tempo, com mkfs.ext3 observei o seguinte comportamento, o que pode ser útil:

  • escrever tabelas de inode corre rápido até atingir 1053 (~ 1 segundo), depois grava cerca de 50, aguarda dois segundos e depois as próximas 50 são gravadas (de acordo com a exibição do console)
  • quando tento cancelar a operação com Control + C, ela fica suspensa por meio minuto antes de ser realmente cancelada

O desempenho dos discos individualmente é muito bom; executei o bonnie ++ em cada um separadamente, com valores de gravação / leitura em torno de 95 / 110MB / s. Mesmo quando executo o bonnie ++ em todas as unidades em paralelo, os valores são reduzidos apenas em cerca de 10 MB. Portanto, estou excluindo a programação de hardware / E / S em geral como uma fonte de problema.

Tentei diferentes parâmetros de configuração para o tamanho stripe_cache_size e readahead sem êxito, mas não acho que sejam relevantes para a operação de criação do sistema de arquivos.

Os detalhes do servidor:

  • Servidor Linux 2.6.35-27-generic # 48-Ubuntu SMP x86_64 GNU / Linux
  • mdadm - v2.6.7.1

Alguém tem uma sugestão sobre como depurar ainda mais isso?

Elmar Weber
fonte

Respostas:

4

Eu concordo que isso possa estar relacionado ao alinhamento das faixas. Da minha experiência, a criação de XFS desalinhado em RAID-0 de 3 * 2 TB leva ~ 5 minutos, mas se estiver alinhada ao tamanho da faixa, será de aproximadamente 10 a 15 segundos. Aqui está um comando para alinhar o XFS ao tamanho da faixa de 256 KB:

mkfs.xfs -l internal,lazy-count=1,sunit=512 -d agsize=64g,sunit=512,swidth=1536 -b size=4096 /dev/vg10/lv00

BTW, a largura da faixa no meu caso é de 3 unidades, que serão as mesmas para você com 4 unidades, mas no RAID-5.

Obviamente, isso também melhora o desempenho do FS, para melhor mantê-lo alinhado.

dtoubelis
fonte
Oi, isso não faz qualquer diferença, eu tentei: time mkfs.xfs -l sunit=128 -d agsize=64g,sunit=128,swidth=512 -b size=4096 /dev/md0 -fque teve aproximadamente o mesmo tempo que mkfs sem parâmetros
Elmar Weber
Estou executando o bonnie ++, para ver se isso faz alguma diferença de desempenho durante a operação. btw: existe alguma razão para o parâmetro agsize? Eu li a página de manual, mas não pude deduzir o benefício de defini-la como um valor.
Elmar Weber 22/03
(btw: comando acima foi errado, swidth correta era 384)
Elmar Weber
Não recebi nenhum aumento de desempenho no mkfs, mas o desempenho geral medido com o bonnie ++ é muito melhor: as operações de criação / exclusão de arquivos são cerca de 4 vezes melhores que antes e a velocidade de gravação sequencial é de cerca de 15%. Muito obrigado.
Elmar Weber 22/03
2
agsize não é realmente necessário aqui - o mkfs o calculará automaticamente (dividindo o tamanho do volume pelo número de CPUs lógicas). É o restante da minha própria configuração - criei este volume com algumas expectativas para futuras alterações na configuração.
dtoubelis
6

Eu suspeito que você esteja enfrentando um problema típico de gravação pequena do RAID5. Para gravações abaixo do tamanho de uma faixa, é necessário executar uma leitura-modificação-gravação para os dados e a paridade. Se a gravação tiver o mesmo tamanho da faixa, ela poderá simplesmente substituir a paridade, pois sabe qual é o valor e não precisa recalculá-lo.

malcolmpdx
fonte
Faria sentido, estou vendo isso corretamente ?: De acordo com a saída mkfs.ext3, ele grava cerca de 25 tabelas de inode por segundo, suponho que sejam menores que 64k durante a criação inicial, portanto, uma faixa de 64k é gravada. Isso significaria uma gravação de 16k em cada disco; portanto, juntas 25 gravações aleatórias de 16k por segundo, com um tamanho de setor de 4kb, isso significa 100 operações aleatórias de E / S por segundo, que é sobre o que o bonnie ++ mostrou.
Elmar Weber
Corresponde ao resultado do bonnie ++ no ataque real, leitura de 335 MB e gravação de 310 MB, no entanto, a criação e exclusão de arquivos são apenas 1/4 do desempenho do disco único.
Elmar Weber
3

Seus mkfs e o desempenho subsequente do sistema de arquivos podem melhorar se você especificar a largura da passada e da faixa ao criar o sistema de arquivos. Se você estiver usando os blocos 4k padrão, seu passo é 16 (faixa RAID de 64k dividido pelo bloco de sistema de arquivos de 4k) e a largura da faixa é 48 (passo de 16 do sistema de arquivos multiplicado pelos 3 discos de dados em sua matriz).

mkfs.ext3 -E stride=16 stripe-width=48 /dev/your_raid_device
sciurus
fonte