Il y a quelques jours, j'ai remarqué quelque chose d'assez étrange (du moins pour moi). J'ai lancé rsync en copiant les mêmes données et en les supprimant ensuite vers le montage NFS, appelé /nfs_mount/TEST
. Ceci /nfs_mount/TEST
est hébergé / exporté nfs_server-eth1
. Le MTU sur les deux interfaces réseau est 9000, le commutateur entre prend également en charge les trames jumbo. Si je le fais, rsync -av dir /nfs_mount/TEST/
j'obtiens une vitesse de transfert réseau de X Mbps. Si je le fais, rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
j'obtiens une vitesse de transfert réseau d'au moins 2X MBps. Mes options de montage NFS sont 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
.
Ligne de fond: les deux transferts passent par le même sous-réseau, les mêmes fils, les mêmes interfaces, lisent les mêmes données, écrivent dans le même répertoire, etc. La seule différence est via NFSv3, l'autre sur rsync.
Le client est Ubuntu 10.04, le serveur Ubuntu 9.10.
Comment se fait-il que rsync soit beaucoup plus rapide? Comment faire en sorte que NFS corresponde à cette vitesse?
Merci
Edit: notez que j’utilise rsync pour écrire sur le partage NFS ou sur SSH sur le serveur NFS et y écrire localement. Je fais les deux fois rsync -av
, en commençant par le répertoire de destination clair. Demain je vais essayer avec une copie simple.
Edit2 (informations supplémentaires): La taille du fichier est comprise entre 1 Ko et 15 Mo. Les fichiers sont déjà compressés, j'ai essayé de les compresser davantage sans succès. J'ai fait un tar.gz
fichier à partir de ça dir
. Voici le motif:
rsync -av dir /nfs_mount/TEST/
= transfert le plus lent;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= le plus rapide rsync avec les trames jumbo activées; sans trames jumbo est un peu plus lent, mais toujours nettement plus rapide que celui directement à NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= environ le même que son équivalent non-tar.gz;
Tests avec cp
et scp
:
cp -r dir /nfs_mount/TEST/
= légèrement plus rapide quersync -av dir /nfs_mount/TEST/
mais toujours significativement plus lent quersync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= le plus rapide dans l'ensemble, légèrement dépassérsync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= environ le même que son équivalent non-tar.gz;
Conclusion, basée sur ces résultats: Pour ce test, il n'y a pas de différence significative si vous utilisez tar.gz gros fichier ou plusieurs petits. Les trames Jumbo activées ou désactivées ne font également presque aucune différence. cp
et scp
sont plus rapides que leurs rsync -av
équivalents respectifs . L'écriture directe sur le partage NFS exporté est nettement plus lente (au moins deux fois) que l'écriture dans le même répertoire sur SSH, quelle que soit la méthode utilisée.
Les différences entre cp
et rsync
ne sont pas pertinentes dans ce cas. J'ai décidé d'essayer cp
et scp
de voir si elles montrent le même motif et elles le font - différence 2X.
Comme je l’utilise rsync
ou cp
dans les deux cas, je ne comprends pas ce qui empêche NFS d’atteindre la vitesse de transfert des mêmes commandes sur SSH.
Comment se fait-il que l'écriture sur le partage NFS est deux fois plus lente que l'écriture au même endroit sur SSH?
Edit3 (NFS serveur / etc / exports) Options: rw,no_root_squash,no_subtree_check,sync
. / Proc / mounts spectacles du client: 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
.
Merci à tous!