A instalação do software RAID10 grava arquivos pequenos extremamente lentamente, isso é normal?

1

Eu tenho uma configuração de software RAID-10 no Linux 3.16.6-203.fc20.x86_64, com metadados 1.2 e o tamanho padrão do bloco (512K):

$ cat /proc/mdstat
md0 : active raid10 sdc1[4] sdb1[0] sdd1[2] sde1[3]
      3907023872 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      bitmap: 4/30 pages [16KB], 65536KB chunk

unused devices: <none>

O sistema de arquivos é ext4, sobre o LVM, sobre o grupo de volumes RAID-10.

$ df -k .
Filesystem                     1K-blocks      Used  Available Use% Mounted on
/dev/mapper/vg_raid10-lv_home 2015734504 810039552 1103278568  43% /home

com opções de montagem:

$ mount | grep vg_raid10-lv_home
/dev/mapper/vg_raid10-lv_home on /home type ext4 (rw,relatime,seclabel,stripe=256)

Tudo parece bem. O SMART indica que todos os discos são perfeitamente normais, sem setores realocados, pendentes ou offline. O rendimento bruto de gravação síncrona parece ser razoavelmente bom:

$ dd if=/dev/zero of=tmp.bin bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 7.85743 s, 137 MB/s

No entanto, ao escrever pequenos 100b ( EDIT: como apontado nas respostas, eu estava escrevendo 512 pedaços de byte, não 100 pedaços de byte ) para o RAID-array, é extremamente lento (cerca de 84ms por gravação síncrona):

$ dd if=/dev/zero of=tmp.bin bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 84.2859 s, 6.1 kB/s

Isso é normal para a configuração RAID-10 que eu tenho?

    
por Raman 05.11.2014 / 16:22

3 respostas

1

O RAID10 não acelera qualquer forma de O_*SYNC , pelo menos não para arquivos pequenos. Você está escrevendo 512b por vez, e após cada gravação, forçando-a para o disco (mais os metadados necessários para lê-la de volta, por exemplo, tamanho do arquivo).

Isso requer que o RAID10 grave no mínimo dois discos, provavelmente quatro (ou seja, todos os seus discos). E todas essas gravações precisam ser concluídas antes que possam retornar ao dd, pois essa é a garantia O_DSYNC solicitada.

    
por 05.11.2014 / 17:03
0

Seu comando dd me dá 73,7 kB / s - em um SSD. Então sim, eu acho que é normal. Ou melhor, o dd simplesmente não é uma boa referência.

O RAID certamente não faz nenhum aumento de velocidade para arquivos pequenos. Os tempos de acesso ainda permanecem os mesmos e, para um arquivo pequeno, é o que levará a maior parte do esforço para os HDDs; em primeiro lugar, levar a cabeça de leitura ao endereço físico do arquivo levará mais tempo do que realmente lê-lo.

(Você está desacelerando ainda mais se tiver discos do setor 4K, que estão tendo que fazer algo especial para fazer uma gravação de menos de um setor completo.)

    
por 05.11.2014 / 16:59
-1

Você não está fazendo "100b" (bloqueios de byte? qual foi a sua intenção?) pedaços, você está fazendo pedaços de 512 bytes. Isso é sempre lento porque o RAID está usando 512k pedaços. Isso significa que para todos os 512 bytes o sistema RAID tem que ler um pedaço de 512k, atualizar 512 bytes naquele pedaço, calcular sua paridade e gravar os dados + paridade em disco. Ele tem que fazer a atualização, o cálculo de paridade e a gravação de paridade de 512k + 512k toda vez para cada um dos 1000 blocos que você está escrevendo. A leitura é feita apenas uma vez, pois é mantida no cache do buffer, e toda a operação leva apenas um fragmento RAID.

Então, sim, isso é normal. Não faça isso: -)

EDIT: o acima seria verdade para o RAID5. Para RAID10, a paridade não é calculada, mas para cada bloco dd de 512 bytes, ainda há 2 vezes uma gravação de 512k, uma para cada espelho. Então você ainda está escrevendo um total de 1000MB enquanto atualiza apenas 512k. Possivelmente, o sistema é inteligente o suficiente para apenas escrever os setores atualizados, mas eu suspeito strongmente que não é o que está acontecendo. Considere também as atualizações do bitmap de intenção de gravação.

    
por 05.11.2014 / 17:02