Tengo dos máquinas conectadas con 10 Gbit Ethernet. Deje que uno de ellos sea servidor NFS y otro sea cliente NF.
Probar la velocidad de la red a través de TCP con iperf
un rendimiento de ~ 9.8 Gbit / s en ambas direcciones, por lo que la red está bien.
Prueba del rendimiento del disco del servidor NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
El resultado es ~ 150 MBytes / s, por lo que el disco funciona bien para escribir.
El servidor /etc/exports
es:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
El cliente monta este recurso compartido en su local /mnt/test
con las siguientes opciones:
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)
Si intento descargar un archivo grande (~ 5 Gb) en el equipo cliente desde el recurso compartido NFS, obtengo un rendimiento de ~ 130-140 MBytes / s, que está cerca del rendimiento del disco local del servidor, por lo que es satisfactorio.
Pero cuando intento cargar un archivo grande en el recurso compartido NFS, la carga comienza a ~ 1.5 Mbytes / s, aumenta lentamente hasta 18-20 Mbytes / sy deja de aumentar. A veces, el recurso compartido se "cuelga" durante un par de minutos antes de que se inicie la carga, es decir, el tráfico entre los hosts se acerca a cero y, si lo ejecuto ls /mnt/test
, no vuelve durante uno o dos minutos. Luego el ls
comando regresa y la carga comienza a su velocidad inicial de 1.5Mbit / s.
Cuando la velocidad de carga alcanza su máximo (18-20 Mbytes / s), ejecuto iptraf-ng
y muestra ~ 190 Mbit / s de tráfico en la interfaz de red, por lo que la red no es un cuello de botella aquí, así como el HDD del servidor.
Lo que probé:
1.
Configure un servidor NFS en un tercer host que estaba conectado solo con una NIC Ethernet de 100Mbit. Los resultados son analógicos: DL muestra un buen rendimiento y una utilización de red casi completa de 100Mbit, la carga no se realiza más rápido que cientos de kilobytes por segundo, dejando la utilización de la red muy baja (2.5 Mbit / s según iptraf-ng
).
2. Intenté ajustar algunos parámetros de NFS:
sync
oasync
noatime
no
hard
rsize
ywsize
son máximos en mis ejemplos, así que intenté disminuirlos en varios pasos hasta 8192
3. Traté de cambiar las máquinas cliente y servidor (configurar el servidor NFS en el cliente anterior y viceversa). Además, hay seis servidores más con la misma configuración, así que intenté montarlos entre sí en diferentes variaciones. Mismo resultado.
4. MTU = 9000, MTU = 9000 y agregación de enlace 802.3ad, agregación de enlace con MTU = 1500.
5. sintonización 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
Mismo resultado.
6. Montar desde localhost:
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/
Y aquí obtengo el mismo resultado: la descarga /mnt/testmount/
es rápida, la carga /mnt/testmount/
es muy lenta, no más rápido que 22 MBytes / sy hay un pequeño retraso antes de que la transferencia comience realmente. ¿Significa que la pila de red funciona sin problemas y el problema está en NFS?
Todo esto no ayudó, los resultados no diferían significativamente de la configuración predeterminada. echo 3 > /proc/sys/vm/drop_caches
fue ejecutado antes de todas las pruebas.
La MTU de todos los NICS en los 3 hosts es 1500, no se realizó un ajuste de red no estándar. El conmutador Ethernet es Dell MXL 10 / 40Gbe.
El sistema operativo es 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
¿Qué configuraciones me estoy perdiendo? ¿Cómo hacer que NFS escriba rápidamente y sin bloqueos?
Operation not permitted
intento adjuntar strace al proceso NFS.