Problemas de rendimiento de NFS en Debian

9

Tengo un rendimiento muy inconsistente con NFS entre dos máquinas con silbido, y parece que no puedo precisarlo.

Preparar:

Máquina 1 'video1': Dual 5506 con 12 GB de ram, XFS en 8x3TB RAID6 exportado como 'video1' desde '/ mnt / storage'

Máquina 2 'almacenamiento1': Phenom X2 @ 3.2Ghtz con 8GB de ram, ZFS en 5x2TB exportado como 'almacenamiento1' desde / mnt / storage1-storage

Rendimiento de escritura 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

Rendimiento de lectura local:

Ambos están conectados al mismo conmutador HP gigabit, e iperf ofrece 940mbps sólidos en ambos sentidos.

Mi problema es que cuando escribo en la exportación de video1 desde el almacenamiento1, el rendimiento está por todas partes. Parece que durante los primeros (5-7) conciertos de transferencia de archivos (espero mover los archivos AVCHD o MJPEG de 30-120GB lo más rápido posible), el rendimiento va de 900mbps, a 150-180mbps, por lo que lento como 30mbps. Si reinicio el servidor del kernel NFS, el rendimiento se recupera para algunos conciertos más.

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

Cuando las cosas van rápido, nfsiostat en el cliente proporciona RTT promedio de unos pocos ms, pero dispara a más de 1.5 segundos RTT tan pronto como el rendimiento cae. Además, la profundidad de la cola de la CPU salta a más de 8 mientras ocurre la escritura.

Ahora, cuando leo desde la misma exportación, obtengo 890Mbps hermosos o recibo unos pocos mbps para toda la lectura.

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

Lo mismo ocurre al revés con storage1 como el servidor NFS. La cola de la CPU salta, las velocidades caen a una mierda, y me saco el pelo.

He intentado aumentar el número de demonios NFS a 64, y todavía se escupe después de algunos conciertos.

Kyle M
fuente
... la opción asíncrona en la exportación lo arregló. Ahora para ver si puedo buscar algunos mbps más con marcos gigantes.
Kyle M
1
Publique esto como respuesta y acéptelo cuando pueda para que otros sepan que el problema está resuelto.
mgorven

Respuestas:

4

No incluye sus opciones de montaje o exportación, por lo que hay una serie de cosas con NFS que podrían estar afectando el rendimiento. Recomiendo probar las siguientes opciones para obtener el máximo rendimiento y confiabilidad de NFS (según mis experiencias):

  • Opciones de montaje: tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768

  • Opciones de exportación: async

Christopher Cashell
fuente
Solo una nota, también, las opciones de montaje anteriores también son las recomendadas por Oracle para ejecutar Oracle en NFS.
Christopher Cashell
También pude mejorar significativamente el rendimiento con el consejo anterior, sin embargo, no nfsvers=3fue necesario.
anarcat
@anarcat: para los lanzamientos modernos, tienes razón, nfsvers=3no importará tanto. Los montajes NFS de Linux solían tener la versión 2 de NFS por defecto, a menos que haya especificado la versión 3. En esos casos, valió la pena establecer explícitamente la versión. En las versiones modernas, mount negociará, comenzando con v4, luego probando v3 y luego volviendo a v2.
Christopher Cashell