J'essaie de copier un lot de fichiers avec scp
mais c'est très lent. Ceci est un exemple avec 10 fichiers:
$ time scp cap_* user@host:~/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 chose étrange est que le taux de transfert est d’environ 413 Ko / s et que la taille du fichier est d’environ 413 Ko; il faut donc vraiment transférer un fichier par seconde, mais cela prend environ 4,3 secondes par fichier.
Avez-vous une idée de la provenance de ce temps système et existe-t-il un moyen de le rendre plus rapide?
scp
time
batch-jobs
laurent
la source
la source
Réponses:
Le commentaire de @ wurtel est probablement correct: il y a beaucoup de frais généraux lors de l'établissement de chaque connexion. Si vous pouvez résoudre ce problème, vous obtiendrez des transferts plus rapides (et si vous ne le pouvez pas, utilisez simplement la
rsync
solution de contournement de @ roaima ). J'ai effectué une expérience en transférant des fichiers de taille similaire (head -c 417K /dev/urandom > foo.1
et en copiant certaines copies) vers un hôte qui met un certain temps à se connecter (HOST4) et qui répond très rapidement (HOST1):la source
Vous pouvez utiliser
rsync
(overssh
), qui utilise une seule connexion pour transférer tous les fichiers source.Si vous n'avez pas
rsync
(et pourquoi pas !?), vous pouvez utilisertar
avecssh
comme ceci, ce qui évite de créer un fichier temporaire:Le
rsync
doit être préféré, toutes choses étant égales par ailleurs, car il peut être redémarré en cas d'interruption.la source
scp
invocation n'utiliserait pas une seule connexion pour transférer tous les fichiers?f -
chaque côté, car les sorties de tar vers / lit à partir de stdout / stdin par défaut. Alorstar cz cap_* | ssh user@host tar xvzC dir
le ferais.tar
peut être compilé avec différentes valeurs par défaut (voyeztar --show-defaults
si vous utilisez GNU tar, ou/etc/default/tar
autrement, et dans les deux cas, n'oubliez pas laTAPE
variable d'environnement)scp
cela créerait une nouvelle connexion pour chaque fichier, mais au souvenir - et après un double contrôle avectshark
- j'ai réalisé que je n'étais pas correct. À ce stade, je ne sais plus trop pourquoi les POscp
devraient prendre un temps aussi long par fichier.C'est la négociation du transfert qui prend du temps. En général, les opérations sur n fichiers de b octets prennent beaucoup plus de temps qu'une seule opération sur un fichier unique de n * b octets. Ceci est également vrai, par exemple, pour les E / S de disque.
Si vous regardez attentivement, vous verrez que le taux de transfert dans ce cas est size_of_the_file / secs.
Pour transférer des fichiers plus efficacement, regroupez-les avec
tar
, puis transférez l'archive:tar cvf myarchive.tar cap_20151023T*.png
ou, si vous voulez aussi compresser l'archive,
tar cvzf myarchive.tar.gz myfile*
Compresser ou non dépend du contenu du fichier, par exemple. si ce sont des JPEG ou des PNG, la compression n'aura aucun effet.
la source
-z
tar
normalement une deuxième passe pour la compression ou si nous compressions et archivions en même temps-z
processeur lié, et beaucoup plus lent. gzip essaiera toujours de compresser, d’où le ralentissement; Après tout, vous ne pouvez pas savoir si une chaîne d'octets est compressible avant d'avoir essayé de la compresser. Dans ma configuration, même lors du transfert de fichiers en texte brut, rsync sans compression est le facteur le plus rapide par 2 à 3 comparé à la compression la plus légère. Bien sûr, YMMV.Une autre raison de la lenteur de scp, en particulier sur les réseaux à bande passante élevée, réside dans le fait qu'il dispose de mémoires tampons internes de contrôle de flux définies de manière statique qui finissent par devenir des goulots d'étranglement des performances du réseau.
HPN-SSH est une version patchée d'OpenSSH qui augmente la taille de ces tampons. La vitesse de transfert SCP fait une énorme différence (voir les tableaux sur le site, mais je parle aussi par expérience personnelle). Bien entendu, pour bénéficier des avantages nécessaires à l’installation de HPN-SSH sur tous vos hôtes, cela vaut le coup si vous devez régulièrement transférer des fichiers volumineux.
la source
J'ai utilisé la technique décrite ici qui utilise gzip en parallèle et netcat pour compresser et copier rapidement des données.
Cela revient à:
Ceci utilise tar pour rassembler le ou les fichiers. Ensuite, utilise pigz pour compresser et envoyer de nombreux threads cpu, la transmission réseau utilisant netcat. Du côté de la réception, netcat écoute puis décompresse (en parallèle) et décompresse.
la source
nc
n'est pas crypté. Ajouter de lassh -D
magie peut-être?Je viens tout juste d’avoir ce problème lors du transfert d’un grand fichier mp4 de site à site
scp
. Obtenait ~ 250KB / s. Une fois la protection UDP Flood désactivée sur le pare-feu de destination, le taux de transfert a atteint 6,5 Mo / s. Lors de la remise en marche de la FP, le débit est tombé à environ 250 Ko / s.Expéditeur: cygwin, destinataire: Fedora 20, pare-feu Sophos UTM.
Pourquoi SSH utilise-t-il UDP? @ superuser.com - Cela ne découle pas directement de ce que j'ai lu.
Lors de l'examen du journal du pare-feu, la détection d'inondation se produisait à la fois sur les ports source et de destination 4500 sur les adresses IP publiques, et non sur les adresses VPN internes de site à site privé. Il semble donc que mon problème est probablement une situation de NAT Traversal où les
scp
données TCP sont finalement cryptées et encapsulées dans des paquets ESP et UDP, et par conséquent soumises à la PF. Pour supprimerscp
l'équation, j'ai exécuté une opération de copie de fichier Windows sur le VPN et j'ai constaté des performances similaires à cellesscp
avec et sans la fonction FP activées. Également exécuté uniperf
test sur TCP et remarqué 2 Mbits / s avec FP, et 55 Mbits / s sans.Comment NAT-T fonctionne-t-il avec IPSec? @ cisco.com
la source