Hace unos días noté algo bastante extraño (al menos para mí). Ejecuté rsync copiando los mismos datos y eliminándolos luego al montaje NFS, llamado /nfs_mount/TEST
. Esto /nfs_mount/TEST
se aloja / exporta desde nfs_server-eth1
. La MTU en ambas interfaces de red es 9000, el conmutador entre soportes también admite tramas gigantes. Si lo hago rsync -av dir /nfs_mount/TEST/
, obtengo la velocidad de transferencia de red X MBps. Si lo hago rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
, obtengo una velocidad de transferencia de red de al menos 2X MBps. Mis opciones de montaje NFS son nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
En pocas palabras: ambas transferencias pasan por la misma subred de red, los mismos cables, las mismas interfaces, leen los mismos datos, escriben en el mismo directorio, etc. La única diferencia es a través de NFSv3, la otra a través de rsync.
El cliente es Ubuntu 10.04, el servidor Ubuntu 9.10.
¿Cómo es que rsync es mucho más rápido? ¿Cómo hacer que NFS coincida con esa velocidad?
Gracias
Editar: tenga en cuenta que uso rsync para escribir en NFS share o SSH en el servidor NFS y escribir localmente allí. Ambas veces lo hago rsync -av
, comenzando con un claro directorio de destino. Mañana lo intentaré con copia simple.
Edit2 (información adicional): el tamaño del archivo varía de 1 KB a 15 MB. Los archivos ya están comprimidos, intenté comprimirlos aún más sin éxito. Hice un tar.gz
archivo de eso dir
. Aquí está el patrón:
rsync -av dir /nfs_mount/TEST/
= transferencia más lenta;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= rsync más rápido con marcos jumbo habilitados; sin tramas gigantes es un poco más lento, pero sigue siendo significativamente más rápido que el que está directamente en NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= aproximadamente lo mismo que su equivalente no tar.gz;
Pruebas con cp
y scp
:
cp -r dir /nfs_mount/TEST/
= ligeramente más rápido que,rsync -av dir /nfs_mount/TEST/
pero aún significativamente más lento quersync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= más rápido en general, supera ligeramentersync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= aproximadamente lo mismo que su equivalente no tar.gz;
Conclusión, basada en estos resultados: para esta prueba no hay una diferencia significativa si se usa tar.gz archivo grande o muchos archivos pequeños. Los marcos jumbo activados o desactivados tampoco hacen casi ninguna diferencia. cp
y scp
son más rápidos que sus respectivos rsync -av
equivalentes. Escribir directamente en el recurso compartido NFS exportado es significativamente más lento (al menos 2 veces) que escribir en el mismo directorio a través de SSH, independientemente del método utilizado.
Las diferencias entre cp
y rsync
no son relevantes en este caso. Decidí probar cp
y scp
solo para ver si muestran el mismo patrón y lo hacen, 2 veces la diferencia.
Mientras uso rsync
o cp
en ambos casos, no puedo entender qué impide que NFS alcance la velocidad de transferencia de los mismos comandos a través de SSH.
¿Cómo es que escribir en NFS share es 2 veces más lento que escribir en el mismo lugar a través de SSH?
Edit3 (NFS servidor / etc / exportaciones opciones): rw,no_root_squash,no_subtree_check,sync
. / Proc / mounts muestra del cliente: nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
¡Gracias a todos!