GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Scp è così lento e come renderlo più veloce?

Sto cercando di copiare un batch di file con scp ma è molto lento. Questo è un esempio con 10 file:

$ time scp cap_* [email protected]:~/dir
cap_20151023T113018_704979707.png    100%  413KB 413.2KB/s   00:00    
cap_20151023T113019_999990226.png    100%  413KB 412.6KB/s   00:00    
cap_20151023T113020_649251955.png    100%  417KB 416.8KB/s   00:00    
cap_20151023T113021_284028464.png    100%  417KB 416.8KB/s   00:00    
cap_20151023T113021_927950468.png    100%  413KB 413.0KB/s   00:00    
cap_20151023T113022_567641507.png    100%  413KB 413.1KB/s   00:00    
cap_20151023T113023_203534753.png    100%  414KB 413.5KB/s   00:00    
cap_20151023T113023_855350640.png    100%  412KB 411.7KB/s   00:00    
cap_20151023T113024_496387641.png    100%  412KB 412.3KB/s   00:00    
cap_20151023T113025_138012848.png    100%  414KB 413.8KB/s   00:00    
cap_20151023T113025_778042791.png    100%  413KB 413.4KB/s   00:00    

real    0m43.932s
user    0m0.074s
sys 0m0.030s

La cosa strana è che la velocità di trasferimento è di circa 413 KB/s e la dimensione del file è di circa 413 KB, quindi in realtà dovrebbe trasferire un file al secondo, tuttavia impiega circa 4,3 secondi per file.

Qualche idea da dove provenga questo sovraccarico e c'è un modo per renderlo più veloce?

Risposta accettata:

Il commento di @wurtel è probabilmente corretto:c'è molto sovraccarico che stabilisce ogni connessione. Se riesci a risolvere il problema, otterrai trasferimenti più rapidi (e se non puoi, usa semplicemente rsync di @roaima soluzione alternativa). Ho fatto un esperimento trasferendo file di dimensioni simili (head -c 417K /dev/urandom > foo.1 e fatto alcune copie di quel file) a un host che impiega un po' di tempo per connettersi (HOST4) e uno che risponde molto rapidamente (HOST1):

$ time ssh $HOST1 echo


real    0m0.146s
user    0m0.016s
sys     0m0.008s
$ time scp * $HOST1:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m0.337s
user    0m0.032s
sys     0m0.016s
$ time ssh $HOST4 echo


real    0m1.369s
user    0m0.020s
sys     0m0.016s
$ time scp * $HOST4:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m6.489s
user    0m0.052s
sys     0m0.020s
$ 

Linux
  1. Come velocizzare il caricamento del mio sito web

  2. Come trasferire file in Linux con SCP e Rsync

  3. Come installare TBB dal sorgente su Linux e farlo funzionare

  4. Come ordinare ls per estensione di file e quindi per nome?

  5. Perché il mio crontab non funziona e come posso risolverlo?

Come usare e sfruttare al meglio il comando fusore in Linux

Come realizzare una USB multiboot in Linux e Windows

Come rendere il sistema Linux più veloce su CPU Intel

Che cosa sono i contenitori multi-account di Firefox? Perché e come usarlo?

Come e perché usare Linux per installare Telnet

Come installare e utilizzare Pigz per comprimere i file più velocemente in Linux