GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist SCP so langsam und wie kann man es schneller machen?

Ich versuche, einen Stapel von Dateien mit scp zu kopieren aber es ist sehr langsam. Dies ist ein Beispiel mit 10 Dateien:

$ 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

Das Seltsame ist, dass die Übertragungsrate etwa 413 KB/s und die Dateigröße etwa 413 KB beträgt, also sollte eigentlich eine Datei pro Sekunde übertragen werden, aber es dauert etwa 4,3 Sekunden pro Datei.

Haben Sie eine Idee, woher dieser Overhead kommt, und gibt es eine Möglichkeit, ihn zu beschleunigen?

Akzeptierte Antwort:

Der Kommentar von @wurtel ist wahrscheinlich richtig:Es gibt eine Menge Overhead, um jede Verbindung herzustellen. Wenn Sie das beheben können, erhalten Sie schnellere Übertragungen (und wenn Sie das nicht können, verwenden Sie einfach rsync von @roaima Problemumgehung). Ich habe ein Experiment durchgeführt, bei dem Dateien ähnlicher Größe übertragen wurden (head -c 417K /dev/urandom > foo.1 und einige Kopien dieser Datei gemacht) zu einem Host, der eine Weile braucht, um sich zu verbinden (HOST4), und einem, der sehr schnell antwortet (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. Wie Linux langsame Computer (und den Planeten) rettet

  2. So lässt sich meine Website schneller laden

  3. Wie kann ich dieses Sed-Skript schneller machen?

  4. Wie erstellt und wendet man einen SVN-Patch an?

  5. Wie dynamisches Linken funktioniert, wie es verwendet wird und wie und warum Sie eine Dylib erstellen würden

Wie man den Befehl fuser unter Linux verwendet und optimal nutzt

So erstellen Sie einen Multiboot-USB in Linux und Windows

So machen Sie ein Linux-System schneller auf Intel-CPUs

Was sind Firefox Multi-Account-Container? Warum und wie wird es verwendet?

Wie und warum Linux zur Installation von Telnet verwendet wird

So installieren und verwenden Sie Pigz, um Dateien unter Linux schneller zu komprimieren