Qu'est-ce qui est plus rapide et pourquoi: transférer plusieurs petits fichiers ou quelques gros fichiers?

17

J'aurai bientôt un dossier avec des milliers de fichiers, chaque fichier de l'ordre de quelques Ko. Je devrai les transférer sur un réseau Windows d'un partage UNC à un autre. En général, est-il plus rapide de simplement copier les fichiers en masse, ou serait-il plus rapide de les compresser (par exemple, en utilisant 7zip en mode le plus rapide) et d'envoyer un ou quelques gros fichiers? Ou n'y a-t-il aucune différence dans la pratique?

kestes
la source

Réponses:

37

Il est plus rapide de transférer un seul gros fichier au lieu de beaucoup de petits fichiers en raison de la surcharge de négociation du transfert. La négociation est effectuée pour chaque fichier, donc le transfert d'un seul fichier doit être effectué une fois, le transfert de n fichiers signifie qu'il doit être effectué n fois.

Vous vous épargnerez beaucoup de temps si vous zippez avant le transfert.

Jon Cahill
la source
1
en.wikipedia.org/wiki/Slow-start favorise également les fichiers volumineux.
Commandant Keen
4
Considérez que la compression prendra également du temps. Si vos données ne peuvent pas être compressées (par exemple JPEG, ZIP, JAR et autres formats déjà compressés), vous devez uniquement les tarer (ou ZIP sans compression). Cela économisera du temps CPU pour la tentative inutile de compresser davantage vos données.
Daniel Schneller
Le fait que de nombreux petits fichiers vous causent beaucoup de douleur - entre de minuscules paquets et une poignée de main SMB pour chacun, la fermeture éclair réduira probablement de 60% votre temps de copie.
user2278
+1 pour TAR puisque vous pouvez copier / extraire une archive partielle.
Cristian Vat
Cette réponse est correcte, mais sur Windows 7 (au moins), il existe un bogue connu où la copie exacte du même ensemble de fichiers sur XP est beaucoup plus rapide que sur Windows 7: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone
5

Jon Cahill est très correct, un seul fichier sera plus rapide. Cependant, il convient de garder à l'esprit que s'il y a une instabilité dans la connexion, les fichiers individuels (ou les groupes de taille moyenne dans les fichiers zip) peuvent être meilleurs, car si le transfert échoue, vous devrez tout recommencer, alors qu'avec plusieurs les fichiers que vous aurez juste à refaire le dernier fichier démarré

Glenn Slaven
la source
5
Sauf si le protocole de transfert a repris.
Unkwntech
1

Beaucoup de petits fichiers coûteront également plus cher à écrire dans le système de fichiers qu'un seul gros fichier. Il doit faire des choses comme:

  • Vérifiez que le nom du fichier est unique
  • Écrivez l'entrée de la table de fichiers

Comme vous obtenez de plus en plus de fichiers dans un répertoire, cela peut devenir très coûteux. Et chacune de ces étapes peut ajouter de la latence au processus de copie et ralentir le tout.

Luke Quinane
la source
1
Je suppose qu'il va toujours avoir besoin de tous les petits fichiers dans le système cible, donc il devra probablement extraire le zip plus tard, c'est-à-dire que le système de fichiers devra toujours faire le travail. L'envoi du gros fichier et la décompression seront cependant beaucoup plus rapides que le transfert de tous les petits fichiers sur le net.
BlaM
@BlaM, comme je l'ai dit dans la réponse, tout se résume à la latence. Si la latence du réseau est ajoutée à chaque opération CreateFile, la durée totale pourrait être beaucoup plus longue. Si la copie est suffisamment intelligente pour créer simultanément des fichiers, cela n'aura peut-être pas d'impact sur l'opération.
Luke Quinane
0

La taille moyenne des paquets par rapport à la taille moyenne des fichiers est probablement critique ici. Avec beaucoup de petits fichiers, vous pouvez vous retrouver à envoyer de nombreux petits paquets. De minuscules paquets subissent toujours une surcharge TCP; vous pourriez finir par doubler la quantité de trafic.

Les systèmes modernes et même les plus anciens peuvent envoyer plusieurs fichiers sur une seule connexion TCP, évitant ainsi les coûts de cette prise de contact.

jldugger
la source
0

Exactement ce que j'ai trouvé, mais si vous voulez un transfert plus rapide, lancez le transfert depuis l'ordinateur local et copiez-le sur le disque local.

Par exemple, copiez \ computer1 \ myshare vers c: \ files \ myshare, n'utilisez pas un troisième ordinateur et copiez de \ computer1 \ myshare vers \ computer2 \ mynewshare.

Cuves
la source
0

Il convient également de se rappeler que le choix du protocole affecte le temps global d'exécution - par exemple, pour les fichiers FTP d'un hôte à un autre, peut être sensiblement plus rapide que d'utiliser le partage de fichiers Windows (bien sûr, des choses comme les autorisations de domaine et autres sont également perdu, mais dans certaines situations, cela peut être un compromis acceptable - Après tout, ceux-ci seraient également perdus en zippant / décompressant)

Rowland Shaw
la source