Baixo desempenho do NFS ao ler arquivos grandes sequencialmente

5

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.

    
por NPE 09.11.2011 / 13:44

1 resposta

1

Discos mais rápidos, mais memória na caixa. Eu acho que a sua conclusão está certa - você está ligado.

Quanta memória seu servidor NFS tem em relação ao seu conjunto de trabalho? Seu conjunto de trabalho se encaixará no cache?

O que é o armazenamento de back-end? Você diz que tem uma taxa de transferência de 180-360MB / s, mas como funciona para E / S aleatória? Sugiro usar algo como fio para obter um idéia. O seekwatcher também é divertido para visualizar o I / O. Mas se você puder evitar bater nos discos, melhor.

    
por 10.11.2011 / 02:57