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.
fonte
Respostas:
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
fonte
nfsvers=3
não era necessário.nfsvers=3
nã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.