Eu tenho duas máquinas conectadas com 10Gbit Ethernet. Deixe um deles ser servidor NFS e outro será cliente NFs.
Testar a velocidade da rede através de TCP com uma iperf
taxa de transferência de ~ 9,8 Gbit / s em ambas as direções, para que a rede esteja OK.
Testando o desempenho do disco do servidor NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
O resultado é de ~ 150 MBytes / s, portanto, o disco funciona bem para gravação.
O servidor /etc/exports
é:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
O cliente monta esse compartilhamento no local /mnt/test
com as seguintes opções:
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
Se eu tentar baixar um arquivo grande (~ 5 GB) na máquina cliente do compartilhamento NFS, obtive um desempenho de ~ 130-140 MBytes / s, que é próximo ao desempenho do disco local do servidor, portanto é satisfatório.
Mas quando tento fazer upload de um arquivo grande para o compartilhamento NFS, o upload começa em ~ 1,5 Mbytes / s, aumenta lentamente até 18-20 Mbytes / s e para de aumentar. Às vezes, o compartilhamento é interrompido por alguns minutos antes do início do upload, ou seja, o tráfego entre hosts fica próximo de zero e, se eu executar ls /mnt/test
, ele não retorna durante um ou dois minutos. Em seguida, o ls
comando retorna e o upload é iniciado na velocidade inicial de 1,5 Mb / s.
Quando a velocidade de upload atinge o máximo (18-20 Mbytes / s), eu corro iptraf-ng
e mostra ~ 190 Mbit / s de tráfego na interface de rede, para que a rede não seja um gargalo aqui, assim como o disco rígido do servidor.
O que eu tentei:
1.
Configure um servidor NFS em um terceiro host que esteja conectado apenas a uma NIC Ethernet de 100Mbit. Os resultados são analógicos: o DL mostra bom desempenho e utilização quase total da rede de 100Mbit, o upload não é mais rápido que centenas de kilobytes por segundo, deixando a utilização da rede muito baixa (2,5 Mbit / s, de acordo com iptraf-ng
).
2. Tentei ajustar alguns parâmetros do NFS:
sync
ouasync
noatime
não
hard
rsize
ewsize
são máximos nos meus exemplos, então tentei diminuí-los em várias etapas até 8192
3. Tentei alternar as máquinas cliente e servidor (configure o servidor NFS no antigo cliente e vice-versa). Além disso, existem mais seis servidores com a mesma configuração, então tentei montá-los entre si em diferentes variações. Mesmo resultado.
4. MTU = 9000, MTU = 9000 e agregação de link 802.3ad, agregação de link com MTU = 1500.
5. ajuste de sysctl:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
Mesmo resultado.
6. Monte a partir do host local:
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
E aqui eu obtenho o mesmo resultado: o download de /mnt/testmount/
é rápido, o upload para /mnt/testmount/
é muito lento, não mais rápido que 22 MBytes / se há um pequeno atraso antes do início da transferência. Isso significa que a pilha de rede funciona perfeitamente e o problema está no NFS?
Tudo isso não ajudou, os resultados não diferiram significativamente da configuração padrão. echo 3 > /proc/sys/vm/drop_caches
foi executado antes de todos os testes.
A MTU de todos os NICS em todos os três hosts é 1500, nenhum ajuste de rede não padrão executado. O switch Ethernet é o Dell MXL 10 / 40Gbe.
O SO é o CentOS 7.
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Que configurações estou faltando? Como fazer o NFS escrever rapidamente e sem travar?
Operation not permitted
tentei anexar o strace ao processo do NFS.