19 votos

NFS pobre rendimiento de escritura

Tengo dos máquinas conectadas con 10Gbit Ethernet. Deje que uno de ellos sea servidor NFS y el otro será el cliente NFs.

Las pruebas de velocidad de la red a través de TCP con iperf muestra ~9.8 Gbit/s de rendimiento en ambas direcciones, por lo que la red está bien.

Prueba de servidor NFS del rendimiento del disco:

dd if=/dev/zero of=/mnt/test/rnd2 count=1000000

El resultado es de ~150 Mb/s, por lo que el disco funciona bien para la escritura.

Del servidor /etc/exports está:

/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)

Cliente montajes de este recurso compartido 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 de gran tamaño (~5 gb) en el equipo cliente desde el recurso compartido de NFS, tengo ~130-140 MBytes/s de rendimiento que está cerca del servidor local de rendimiento de disco, por lo que es satisfactorio.

Pero cuando intento hacer el upload de un archivo de gran tamaño para el recurso compartido de NFS, subir comienza a ~1.5 Mbytes/s, aumenta lentamente hasta 18-20 Mbytes/s y deja de aumentar. A veces el compartir "cuelga" por un par de minutos antes de subir, en realidad se inicia, es decir, el tráfico entre hosts que se acerca a cero y si yo ejecuto ls /mnt/test, no volver durante un minuto o dos. A continuación, ls comando devuelve y cargar inicia en la parte inicial de 1.5 Mbit/s de velocidad.

Cuando la velocidad de carga en alcance máximo (de 18 a 20 Mbytes/s), ejecuto iptraf-ng y muestra ~190 Mb/s de tráfico en la interfaz de red, por lo que la red no es un cuello de botella, así como del servidor HDD.

Lo que he intentado:

1. Configurar un servidor NFS en un tercer host que se conecta sólo con una de 100mb Ethernet NIC. Los resultados son analógicos: DL muestra el buen desempeño y la casi completa de 100Mbit la utilización de la red, la carga no se realiza más rápido que cientos de kilobytes por segundo, dejando la utilización de la red muy bajo (2,5 Mbit/s según iptraf-ng).

2. Traté de ajustar algunos NFS parámetros:

  • sync o async

  • noatime

  • no hard

  • rsize y wsize son máximas en mis ejemplos, así que traté de disminuir en varios pasos hacia abajo a 8192

3. He probado a cambiar los equipos cliente y servidor (servidor NFS en un antiguo cliente y viceversa). Además, hay seis más servidores con la misma configuración, por lo que traté de montar uno con el otro en diferentes variaciones. Mismo resultado.

4. MTU=9000, MTU=9000 y 802.3 ad agregación de enlaces, de agregación de enlace con MTU=1500.

5. sysctl de optimización:

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. Montaje de 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í me sale el mismo resultado: la descarga de /mnt/testmount/ es rápido, subir a /mnt/testmount/ es muy lento, no más rápido de 22 Mb/s y hay una pequeña demora antes de la transferencia en realidad comienza. ¿Esto significa que la pila de red funciona a la perfección y el problema está en NFS?

Todo esto no ayuda, los resultados no difieren significativamente de la configuración predeterminada. echo 3 > /proc/sys/vm/drop_caches fue ejecutado antes de que todas las pruebas.

MTU de todas las NIC en los 3 ejércitos es de 1500, el no-estándar de la red de optimización realizado. Conmutador Ethernet es Dell MXL 10/40Gbe.

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

Configuración de lo que me estoy perdiendo? Cómo hacer NFS escribir de forma rápida y sin cuelga?

2voto

shodanshok Puntos 2644

Puede ser un problema relacionado con el tamaño de los paquetes y la latencia. Intente lo siguiente:

El informe de nuevo los resultados.

1voto

Vasoo Veerapen Puntos 11

http://veerapen.blogspot.com/2011/09/tuning-redhat-enterprise-linux-rhel-54.html

Configurar el planificador de Linux en sistemas con hardware RAID y cambiar el valor predeterminado de [cfq] a [noop] da I/O mejoras.

Utilice el comando nfsstat, para calcular el porcentaje de lecturas/escrituras. Configurar el controlador RAID de caché de la relación para que coincida.

Para cargas pesadas, usted necesita aumentar el número de servidor NFS hilos.

Configurar el nfs hilos para escribir sin demora en el disco mediante el no_delay opción.

Decirle al kernel de Linux para lavar tan pronto como sea posible, de modo que las escrituras son tan pequeña como sea posible. En el kernel de Linux, sucio páginas de reescritura de frecuencia puede ser controlado por dos parámetros.

Por más rápido que las escrituras en disco, utilice el sistema de ficheros de datos=opción de diario y evitar que las actualizaciones de acceso del archivo de veces que en sí mismo los resultados adicionales de los datos escritos en el disco. Este es el modo más rápido cuando los datos se leen y escriben a disco en el mismo momento en el que supera a todos los otros modos

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: