Que efeito tem o tamanho da faixa RAID nas configurações de leitura antecipada?

6

Estou tentando descobrir os valores de leitura antecipada corretos para definir em uma matriz RAID10 e estou pensando se o tamanho da faixa RAID deve levar em consideração minhas considerações.

Eu já ouvi informações conflitantes sobre isso no passado. Ouvi dizer que você deve sempre definir seu valor de leitura antecipada como um múltiplo do tamanho da faixa RAID e nunca abaixo do tamanho da faixa, porque essa é a quantidade mínima de dados que o controlador RAID tentará ler de uma só vez.

Alguém me disse, no entanto, que a configuração de leitura antecipada abaixo do tamanho da faixa é boa e pode, de fato, aumentar a quantidade de leituras paralelas que você pode fazer nos dispositivos da matriz, aumentando o desempenho e diminuindo a carga array.

Então, qual é? As configurações de leitura antecipada que não são múltiplos do tamanho da faixa fazem sentido ou não?

    
por stbrody 12.09.2012 / 17:44

1 resposta

4

A lógica para quando o Linux aplica a leitura antecipada é complicada. A partir do 2.6.23, há o Readahead On-Demand realmente chique, antes que ele usasse um mecanismo de previsão menos complicado. Os objetivos de design da leitura antecipada sempre incluem não fazer leitura antecipada, a menos que você tenha um padrão de acesso de leitura que justifique isso. Portanto, a ideia de que o tamanho da faixa é um dado relevante aqui é fundamentalmente insalubre. As leituras individuais que estão nessa extremidade do intervalo de E / S do arquivo, abaixo do tamanho da faixa, normalmente não acionam a lógica de leitura antecipada e a aplicam a elas de qualquer maneira. Valores minúsculos de leitura à frente efetivamente desativam o recurso. E você não quer isso.

Quando você está realmente fazendo E / S sequencial em um grande array RAID10, a única maneira de atingir o throughput completo de muitos sistemas é ter a leitura antecipada funcionando para você. Caso contrário, o Linux não enviará solicitações com rapidez suficiente para manter a leitura da matriz em todo o seu potencial. Nas últimas vezes que testei matrizes de disco maiores de unidades RAID10, na faixa de matriz de 24 discos, grandes configurações de leitura antecipada (> = 4096 = 2048 KB) proporcionaram ganhos de desempenho de 50 a 100% em E / S seqüencial, medido por dd ou bonnie ++. Tente você mesmo; rode o bonnie ++, aumente muito a leitura e veja o que acontece. Se você tem uma grande matriz, isso irá dissipar rapidamente a ideia de que números de leitura antecipada menores que os tamanhos típicos de faixas fazem sentido.

O kernel Linux está tão ciente desta necessidade que aumenta automaticamente a leitura antecipada quando você cria alguns tipos de matrizes. Veja este exemplo em um sistema com um kernel 2.6.32:

[root@toy ~]# blockdev --report
RO    RA   SSZ   BSZ   StartSec        Size      Device 
rw   256   512  4096          0    905712320512  /dev/md1 
rw   768   512   512          0    900026204160   /dev/md0

Por que a leitura em frente é 256 (128KB) em md1, enquanto é 768 (384KB) em md0? Isso porque o md1 é um RAID0 de 3 discos, e o Linux aumenta a leitura antecipada sabendo que ele não tem esperança de atingir a velocidade máxima em um array desse tamanho com o padrão de 256. Mesmo que seja realmente muito baixo; precisa ser 2048 (1024KB) ou maior para atingir a velocidade máxima que o pequeno array é capaz.

Grande parte do conhecimento sobre configurações de RAID de baixo nível, como tamanhos e alinhamento de faixas, é exatamente isso: conhecimento, não realidade. Faça alguns benchmarks com algumas configurações de leitura antecipada, veja o que acontece e, em vez disso, você terá conhecido bons fatos para trabalhar.

    
por 15.09.2012 / 08:21