Eu tenho um servidor NFS3 com vários clientes. Cada cliente está lendo sequencialmente um arquivo grande diferente e o desempenho é muito ruim.
Aqui está o que estou observando em iostat
no servidor para o disco em que os arquivos residem:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sdX 24.33 0.00 712.67 0.00 18.41 0.00 52.91 11.95 16.91 1.40 100.00
Como você pode ver, %util
é 100%. Ao mesmo tempo, a taxa de transferência agregada de E / S ( rMB/s+wMB/s
) é de aproximadamente 18 MB / s, que é de 10 a 20 vezes mais lenta do que a capacidade do disco.
Isso e a proporção de rMB/s
para r/s
me levam a concluir que, em vez de ler grandes blocos de cada arquivo de cada vez, o NFS acaba lendo os arquivos em pequenos pedaços com vários entrelaçamentos entre eles. arquivos diferentes. Isso, por sua vez, leva a muitas buscas em disco, matando o desempenho.
Você diria que a conclusão é justificada pelas evidências?
O que você recomendaria para resolver isso? Posso alterar o aplicativo de leitura e ajustar as configurações do NFS no servidor e no cliente. Estou usando o RedHat 5.6 com o kernel 2.6.18, que acredito limita o rsize
para 32KB (eu ficaria feliz em se provar errado sobre isso).
edit: É assim que as coisas aparecem quando há apenas um único cliente lendo um único arquivo:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sdX 343.33 0.33 1803.33 0.67 105.78 0.00 120.09 0.91 0.50 0.31 56.47
Como você pode ver, o rendimento é muito melhor e %util
também é muito menor.