2 votes

Pourquoi les transferts de fichiers en réseau sont-ils si lents avec plusieurs petits fichiers ?

Lorsque vous transférez de grandes quantités de données (plusieurs Go) par le biais de diverses formes de transfert de fichiers, telles que : FTP, SFTP, NFS et Samba. Ils souffrent tous du même problème de petits fichiers multiples qui entravent les vitesses de transfert jusqu'à quelques Mo ou Ko, même sur une liaison de 10 Gbps.

Cependant, si je zippe, tar ou rar l'ensemble du dossier avant de le transférer, la liaison réseau est entièrement saturée.

  • Qu'est-ce qui provoque cet effet ?

  • Que peut-on faire pour améliorer les performances des transferts importants de nombreux petits fichiers individuels sur un réseau ?

  • Parmi les protocoles de transfert de fichiers disponibles, lequel est le mieux adapté ?

Je dispose d'une administration complète du réseau, de sorte que toutes les configurations et options sont disponibles, comme le réglage des tailles de MTU et de tampon sur les interfaces réseau et la désactivation de l'asynchronisme et du cryptage dans les configurations de serveur de fichiers, pour ne citer que quelques idées.

5voto

Tero Kilkanen Points 32968

Chaque transfert de fichier individuel est une transaction et chaque transaction est associée à des frais généraux. Un exemple approximatif :

  1. Le client dit au serveur : "Je veux envoyer un fichier, le nom du fichier est exemple.txt, la taille est de 100 octets".
  2. Le serveur dit au client : "OK, je suis prêt à recevoir".
  3. Le client envoie 100 octets de données de fichier au serveur.
  4. Le serveur accuse réception au client du fichier et ferme l'identifiant du fichier local.

Aux étapes 1, 2 et 4, il y a un aller-retour supplémentaire entre le client et le serveur, ce qui réduit le débit. De plus, les informations envoyées lors de ces étapes s'ajoutent à l'ensemble des données à transmettre. Si les métadonnées font 20 octets, cela représente 20 % de frais généraux pour un fichier de 100 octets.

Il n'y a aucun moyen d'éviter cette surcharge par fichier sur les protocoles.

4voto

John Mahowald Points 28597

Métadonnées du système de fichiers. La surcharge nécessaire pour rendre les fichiers possibles est sous-estimée par les administrateurs système. Jusqu'à ce qu'ils essaient de gérer de nombreux petits fichiers.

Supposons que vous ayez un million de petits fichiers de 4 Ko, un stockage relativement rapide avec 8 broches de disque, et un lien de 10 Go que la matrice peut parfois saturer avec des lectures séquentielles. Supposons également 100 IOPS par broche, et qu'il faut une IO par fichier (c'est une simplification excessive, mais cela illustre bien le propos).

$ units "1e6 / (8 * 100 per sec)" "sec"
        * 1250
        / 0.0008

21 minutes ! Supposons plutôt que le million de fichiers soit dans un seul fichier d'archive, et que le transfert séquentiel puisse saturer la liaison de 10 Gb. 80% de débit utile, du fait d'être enveloppé d'IP dans Ethernet.

$ units "(1e6 * 4 * 1024 * 8 bits) / (1e10 bits per second * .8)" "sec"
        * 4.096
        / 0.24414062

4 secondes, c'est un peu plus rapide.

Si le stockage sous-jacent est constitué de petits fichiers, n'importe quel protocole de transfert de fichiers aura un problème avec un grand nombre d'entre eux. Lorsque les IOPS de la matrice sont le goulot d'étranglement, le protocole du serveur de fichiers qui s'y ajoute n'est pas vraiment utile.

Le plus rapide serait de copier une grande archive ou une image disque. Principalement des entrées-sorties séquentielles, moins de métadonnées du système de fichiers.

Peut-être qu'avec les protocoles de service de fichiers, il n'est pas nécessaire de tout copier. Montez le partage distant et accédez aux fichiers dont vous avez besoin. Cependant, accéder à des répertoires contenant un très grand nombre de fichiers, ou les copier tous, est toujours lent (et attention, les serveurs NFS qui s'éteignent inopinément peuvent faire que les clients restent bloqués en IO pour toujours).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X