47 votes

Pourquoi rsync est-il plus rapide que NFS ?

Il y a quelques jours, j'ai remarqué quelque chose d'assez étrange (du moins pour moi). J'ai exécuté rsync en copiant les mêmes données et en les supprimant ensuite sur un montage NFS, appelé /nfs_mount/TEST . Cette /nfs_mount/TEST est hébergé/exporté à partir de nfs_server-eth1 . Le MTU sur les deux interfaces réseau est de 9000, le commutateur entre les deux supporte également les trames jumbo. Si je fais rsync -av dir /nfs_mount/TEST/ J'obtiens une vitesse de transfert réseau de X MBps. Si je 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 les suivantes 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 résumé, 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 que l'un passe par NFSv3, l'autre par rsync.

Le client est Ubuntu 10.04, le serveur Ubuntu 9.10.

Comment se fait-il que rsync soit aussi rapide ? Comment faire pour que NFS atteigne cette vitesse ?

T

Edit : please note I use rsync to write to NFS share or to SSH into the NFS server and write locally there. Dans les deux cas, je fais rsync -av en commençant par effacer le répertoire de destination. Demain, j'essaierai avec une copie simple.

Edit2 (informations complémentaires) : La taille des fichiers varie de 1KB à 15MB. Les fichiers sont déjà compressés, j'ai essayé de les compresser davantage sans succès. J'ai fait tar.gz de ce fichier dir . Voici le modèle :

  • rsync -av dir /nfs_mount/TEST/ = transfert le plus lent ;
  • rsync -av dir nfs_server-eth1:/nfs_mount/TEST/ = rsync le plus rapide avec les trames jumbo activées ; sans les trames jumbo, c'est un peu plus lent, mais toujours nettement plus rapide que le rsync directement vers NFS ;
  • rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/ = à peu près la même chose que son équivalent non-tar.gz ;

Tests avec cp y scp :

  • cp -r dir /nfs_mount/TEST/ = légèrement plus rapide que rsync -av dir /nfs_mount/TEST/ mais reste nettement plus lent que le rsync -av dir nfs_server-eth1:/nfs_mount/TEST/ .
  • scp -r dir /nfs_mount/TEST/ = le plus rapide au classement général, dépasse légèrement rsync -av dir nfs_server-eth1:/nfs_mount/TEST/ ;
  • scp -r dir.tar.gz /nfs_mount/TEST/ = à peu près la même chose que son équivalent non-tar.gz ;

Conclusion, sur la base de ces résultats : Pour ce test, il n'y a pas de différence significative entre l'utilisation d'un gros fichier tar.gz et de nombreux petits fichiers. L'activation ou la désactivation des trames Jumbo ne fait pratiquement aucune différence non plus. cp y scp sont plus rapides que leurs rsync -av équivalents. L'écriture directe sur un partage NFS exporté est significativement plus lente (au moins 2 fois) que l'écriture sur le même répertoire via SSH, quelle que soit la méthode utilisée.

Différences entre cp y rsync ne sont pas pertinentes dans ce cas. J'ai décidé d'essayer cp y scp juste pour voir s'ils présentent le même schéma et c'est le cas - une différence de 2X.

Comme je l'utilise rsync o cp dans les deux cas, je ne comprends pas ce qui empêche NFS d'atteindre la vitesse de transfert des mêmes commandes via SSH.

Comment se fait-il que l'écriture sur un partage NFS soit 2X plus lente que l'écriture au même endroit via SSH ?

Edit3 (Options /etc/exports du serveur NFS) : rw,no_root_squash,no_subtree_check,sync . Le fichier /proc/mounts du client affiche : 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 !

0voto

Caroline Points 111

Le verrouillage des fichiers est-il configuré sur le nfsshare ? Vous pourriez obtenir beaucoup plus de performances si cela était désactivé.

-1voto

Je suppose que l'augmentation de la vitesse est au moins en partie due au fait que "rsync src host:/path" crée un processus local sur la machine distante pour l'envoi et la réception, réduisant ainsi de moitié les entrées/sorties.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X