GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué Scp es tan lento y cómo hacerlo más rápido?

Estoy tratando de copiar un lote de archivos con scp pero es muy lento. Este es un ejemplo con 10 archivos:

$ 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

Lo extraño es que la velocidad de transferencia es de aproximadamente 413 KB/s y el tamaño del archivo es de aproximadamente 413 KB, por lo que en realidad debería transferir un archivo por segundo, sin embargo, demora aproximadamente 4,3 segundos por archivo.

¿Alguna idea de dónde proviene esta sobrecarga? ¿Hay alguna forma de hacerlo más rápido?

Respuesta aceptada:

El comentario de @wurtel probablemente sea correcto:hay muchos gastos generales para establecer cada conexión. Si puede arreglar eso, obtendrá transferencias más rápidas (y si no puede, simplemente use el rsync de @roaima solución alterna). Hice un experimento transfiriendo archivos de tamaño similar (head -c 417K /dev/urandom > foo.1 e hice algunas copias de ese archivo) a un host que tarda un poco en conectarse (HOST4) y uno que responde muy rápido (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. Cómo rescata Linux las computadoras lentas (y el planeta)

  2. Cómo hacer que el archivo y el directorio no se puedan eliminar, incluso mediante la raíz en Linux

  3. Redis como caché:cómo funciona y por qué usarlo

  4. ¿Cómo hacer que este script sed sea más rápido?

  5. Cómo instalar TBB desde la fuente en Linux y hacer que funcione

Cómo usar y aprovechar al máximo el comando fuser en Linux

Cómo hacer un USB de arranque múltiple en Linux y Windows

Cómo hacer que el sistema Linux funcione más rápido en CPU Intel

¿Qué son los contenedores multicuenta de Firefox? ¿Por qué y cómo usarlo?

Cómo y por qué usar Linux para instalar Telnet

Cómo instalar y usar Pigz para comprimir archivos más rápido en Linux