Problemas de desempenho do NFS no Debian

9

Estou tendo um desempenho muito inconsistente com o NFS entre duas máquinas sibilantes e não consigo identificá-lo.

Configuração:

Máquina 1 'video1': Dual 5506 com 12 GB de RAM, XFS em 8x3TB RAID6 exportado como 'video1' de '/ mnt / storage'

Máquina 2 'storage1': Phenom X2 a 3.2Ghtz com 8GB de ram, ZFS em 5x2TB exportado como 'storage1' de / mnt / storage1-storage

Desempenho de gravação local:

mackek2@video1:/mnt/storage/testing$ dd if=/dev/zero of=localwrite10GB bs=5000k count=2000
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 16.7657 s, 611 MB/s

Desempenho de leitura local:

Ambos estão conectados ao mesmo switch HP gigabit, e o iperf oferece 940mbps sólidos nos dois sentidos.

Meu problema é que, quando escrevo para a exportação de vídeo1 do storage1, o desempenho está em todo lugar. Parece que, nos primeiros (5-7) shows de transferência de arquivos (espero mover os arquivos AVCHD ou MJPEG de 30 a 120 GB o mais rápido possível), o desempenho passa de 900 Mbps, para 150-180 Mbps, por vezes lento como 30mbps. Se eu reiniciar o servidor do kernel NFS, o desempenho será retomado para mais alguns shows.

mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GB count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 223.794 s, 45.8 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GBTest2 count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 198.462 s, 51.6 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=bigfile776 count=7000 bs=2000K
7000+0 records in
7000+0 records out
14336000000 bytes (14 GB) copied, 683.78 s, 21.0 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite15GB count=3000 bs=5000K
3000+0 records in
3000+0 records out
15360000000 bytes (15 GB) copied, 521.834 s, 29.4 MB/s

Quando as coisas estão indo rápido, o nfsiostat no cliente fornece RTTs médios de alguns ms, mas dispara até mais de 1,5 segundo de RTT assim que o desempenho diminui. Além disso, a profundidade da fila da CPU salta para mais de 8 enquanto a gravação está acontecendo.

Agora, ao ler da mesma exportação, fico bonita 890Mbps, mais ou menos alguns mbps durante toda a leitura.

mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite10GBTest2 of=/dev/null
20000000+0 records in
20000000+0 records out
10240000000 bytes (10 GB) copied, 89.82 s, 114 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite15GB of=/dev/null
30000000+0 records in
30000000+0 records out
15360000000 bytes (15 GB) copied, 138.94 s, 111 MB/s

O mesmo acontece com o storage1 como servidor NFS. A fila da CPU salta, a velocidade cai para uma porcaria e eu puxo meu cabelo.

Eu tentei aumentar o número de daemons do NFS para 64, e ele ainda dispara após alguns shows.

Kyle M
fonte
... opção assíncrona na exportação corrigida. Agora, para ver se consigo extrair mais alguns mbps com quadros jumbo.
21712 Kyle M
1
Poste isso como resposta e aceite-o quando puder para que outras pessoas saibam que o problema foi resolvido.
mgorven

Respostas:

4

Você não inclui suas opções de montagem ou exportação, portanto, há várias coisas no NFS que podem afetar o desempenho. Eu recomendo tentar as seguintes opções para obter o máximo desempenho e confiabilidade do NFS (com base nas minhas experiências):

  • Opções de montagem: tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768

  • Opções de exportação: async

Christopher Cashell
fonte
Apenas uma observação, também, as opções de montagem acima também são as recomendadas pela Oracle para executar o Oracle no NFS.
Christopher Cashell
Consegui também melhorar significativamente o desempenho com a dica acima, no entanto, nfsvers=3não era necessário.
Anarcat
@anarcat - Para lançamentos modernos, você está correto, nfsvers=3não importa tanto. As montagens NFS do Linux costumavam usar o NFS versão 2, a menos que você especificasse a versão 3. Nesses casos, valia a pena definir explicitamente a versão. Nas versões modernas, o mount negociará, começando na v4, depois na v3 e depois na v2.
Christopher Cashell