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.