Pochi giorni fa ho notato qualcosa di piuttosto strano (almeno per me). Ho eseguito rsync copiando gli stessi dati ed eliminandoli successivamente sul mount NFS, chiamato /nfs_mount/TEST
. Questo /nfs_mount/TEST
è ospitato / esportato da nfs_server-eth1
. L'MTU su entrambe le interfacce di rete è 9000, il passaggio tra supporta anche i jumbo frame. Se lo faccio rsync -av dir /nfs_mount/TEST/
ottengo velocità di trasferimento in rete X MBps. Se lo faccio rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
ottengo una velocità di trasferimento in rete di almeno 2X MBps. Le mie opzioni di montaggio NFS sono 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
.
In conclusione: entrambi i trasferimenti passano sulla stessa sottorete di rete, stessi cavi, stesse interfacce, leggono gli stessi dati, scrivono nella stessa directory, ecc. L'unica differenza è tramite NFSv3, l'altra su rsync.
Il client è Ubuntu 10.04, il server Ubuntu 9.10.
Come mai rsync è molto più veloce? Come far corrispondere NFS a quella velocità?
Grazie
Modifica: nota che uso rsync per scrivere sulla condivisione NFS o su SSH nel server NFS e scrivere localmente lì. Entrambe le volte lo faccio rsync -av
, a partire dalla directory di destinazione chiara. Domani proverò con una copia semplice.
Modifica2 (informazioni aggiuntive): la dimensione del file varia da 1 KB a 15 MB. I file sono già compressi, ho provato a comprimerli ulteriormente senza successo. Ho fatto il tar.gz
file da quello dir
. Ecco lo schema:
rsync -av dir /nfs_mount/TEST/
= trasferimento più lento;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= rsync più veloce con jumbo frame abilitato; senza jumbo frame è un po 'più lento, ma comunque significativamente più veloce di quello direttamente a NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= circa uguale al suo equivalente non tar.gz;
Test con cp
e scp
:
cp -r dir /nfs_mount/TEST/
= leggermente più veloce dirsync -av dir /nfs_mount/TEST/
ma ancora significativamente più lento dirsync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= più veloce nel complesso, leggermente superatorsync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= circa uguale al suo equivalente non tar.gz;
Conclusione, basata su questi risultati: per questo test non vi è alcuna differenza significativa se si utilizza il file tar.gz di grandi dimensioni o molti di quelli piccoli. Anche i frame jumbo attivati o disattivati non fanno quasi alcuna differenza. cp
e scp
sono più veloci dei rispettivi rsync -av
equivalenti. Scrivere direttamente sulla condivisione NFS esportata è significativamente più lento (almeno 2 volte) rispetto alla scrittura nella stessa directory su SSH, indipendentemente dal metodo utilizzato.
Le differenze tra cp
e rsync
non sono rilevanti in questo caso. Ho deciso di provare cp
e scp
solo per vedere se mostrano lo stesso modello e lo fanno - differenza 2X.
Mentre uso rsync
o cp
in entrambi i casi, non riesco a capire cosa impedisce a NFS di raggiungere la velocità di trasferimento degli stessi comandi su SSH.
Come mai la scrittura sulla condivisione NFS è 2 volte più lenta della scrittura nello stesso posto su SSH?
Edit3 (server NFS / etc / opzioni di esportazione): rw,no_root_squash,no_subtree_check,sync
. Il cliente / proc / mounts spettacoli: 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
.
Grazie a tutti!