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
$