5 votes

Le moyen le plus rapide de compresser (c'est-à-dire d'archiver dans un seul fichier) des millions de petits fichiers sur un puissant cluster afin d'accélérer le transfert des fichiers.

NOTE IMPORTANTE : La compression n'est PAS l'objectif, c'est l'archivage/la mise en forme (regroupement de tous les fichiers dans une seule archive) qui est l'objectif.

Je souhaite sauvegarder un répertoire unique, qui contient des centaines de sous-répertoires et des millions de petits fichiers (< 800 KB). Lorsque j'utilise rsync pour copier ces fichiers d'une machine vers une autre machine distante, j'ai remarqué que la vitesse de transfert est péniblement faible, seulement de l'ordre de 1 MB/sec, alors que lorsque je copie des fichiers volumineux (par exemple 500 GB) le taux de transfert est en fait de l'ordre de 120 MB/sec. La connexion réseau n'est donc absolument pas en cause.

Dans ce cas, déplacer seulement 200 Go de petits fichiers m'a pris environ 40 heures. J'envisage donc de compresser l'ensemble du répertoire contenant ces fichiers, puis de transférer l'archive compressée vers la machine distante, avant de la décompresser sur cette dernière. Je ne m'attends pas à ce que cette approche réduise 40 heures à 5 heures, mais je pense qu'elle prendrait certainement moins de 40 heures

J'ai accès à un cluster avec 14 cœurs de processeur (56 threads -- Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz) et 128 Go de RAM. La puissance du CPU/RAM n'est donc pas un problème.

Mais quel est le moyen le plus rapide et le plus efficace de créer une archive unique à partir d'un grand nombre de fichiers ? Pour l'instant, je ne connais que ces approches :

Cependant, je ne sais pas lequel est le plus rapide et comment les paramètres doivent être réglés pour atteindre la vitesse maximale (par exemple, est-il préférable d'utiliser tous les cœurs du processeur avec 7zip ou un seul ?)

N.B. Taille du fichier et le taux de compression n'ont PAS d'importance du tout. Je n'essaie PAS du tout d'économiser de l'espace. J'essaie seulement de créer une seule archive à partir d'un grand nombre de fichiers afin que le taux de transfert soit de 120 MB/s au lieu de 1 MB/s.

RELIEF : Comment rendre 7-Zip plus rapide

6voto

porto alet Points 315

U tar mais sans la partie "gzipping". L'objectif du TAR est de convertir les fichiers en un flux unique (il s'agit d'une archive sur bande). En fonction de votre processus, vous pouvez écrire le flux sur un disque et le copier, mais, plus efficacement, vous pouvez l'acheminer (par exemple via SSH) vers l'autre machine, en le décompressant éventuellement en même temps.

Étant donné que le processus est intensif en termes d'entrées-sorties (IO) plutôt qu'en termes d'unités centrales (CPU), la parallélisation du processus ne sera pas d'une grande utilité, si tant est qu'elle le soit. Vous réduirez la taille du transfert de fichiers (si les fichiers ne sont pas exactement divisibles par la taille des blocs), et vous économiserez de l'argent. beaucoup en évitant les allers-retours pour la négociation de chaque dossier.

Pour créer un fichier tar non compressé :

tar -cf file.name /path/to/files

Pour diffuser en continu sur le réseau :

tar -c /path/to/files | ssh user@dest.domain 'cd /dest/dir && tar -x'

Remarque : si vous écrivez un fichier intermédiaire sur un disque dur, comme dans l'exemple 1, il peut être plus rapide de compresser le fichier (gzip) si la compression est suffisante, car cela réduira la quantité de données à écrire sur le disque, ce qui est la partie la plus lente du processus.

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