Eu falo sobre o software Linux RAID. Quando você procura no código , vê que o driver md não está totalmente otimizado: quando várias solicitações contíguas são feitas , o driver md não se funde em um maior. Isso leva a sobrecarga enorme em algumas situações comuns.
Grandes leituras ou gravações são otimizadas: elas são reduzidas a várias solicitações iguais ao tamanho da faixa e tratadas de maneira ideal.
Se a leitura ou gravação for de 2 faixas, o driver md faz o trabalho corretamente: tudo é tratado em uma operação.
Com pequenas leituras, não há problema porque os dados estão no cache do kernel após a primeira leitura. Portanto, várias leituras contíguas geram apenas uma pequena sobrecarga para CPU e memória, em comparação com a largura de banda de disco lenta. Por exemplo, eu leio 1 Gb de dados a 100 bytes de cada vez: o kernel primeiro o transforma em uma leitura de 512 kb porque esse é o tamanho mínimo de E / S (se o tamanho da faixa for de 512 kb). Então os próximos 100 bytes já estarão no cache do kernel. É exatamente a mesma coisa que ler de uma partição não RAID.
Com gravações menores que o tamanho da faixa, o driver md primeiro lê a tarja completa na memória, depois sobrescreve na memória com os novos dados, calcula o resultado se a paridade for usada (principalmente RAID 5 e 6) e grava. aos discos.
Por exemplo, eu escrevo 1 Gb de dados 100 bytes de cada vez: o kernel primeiro lê a faixa de 512 kb, sobrescreve as partes necessárias na memória, computa o resultado se a paridade estiver envolvida, depois grava no disco. Ao escrever os próximos 100 bytes, apenas o "read the 512 kb stripe" é evitado porque os dados estão no cache do kernel. Portanto, temos uma pequena sobrecarga para sobrescrever na memória e na paridade de computação, mas uma grande sobrecarga, porque os dados são gravados novamente na mesma faixa. O código do kernel aqui não está otimizado.
Eu não gravei o suficiente para entender por que essas gravações repetidas não são armazenadas corretamente no cache, e os dados descarregados no disco somente após alguns segundos (portanto, apenas uma vez por faixa). Se eles forem armazenados em cache, a sobrecarga será apenas um pouco de CPU e memória, mas meus próprios benchmarks mostram que a CPU permanece abaixo de 10%, e a E / S é o gargalo.
Se as gravações foram otimizadas, o tamanho mínimo da faixa será sempre o melhor: o RAID 6 com 4 discos com 4 k setores levará a faixas de 8 kb, e será o melhor para leitura e gravação em todas as possíveis carga.