Je compresse normalement en utilisant tar zcvf
et décompresse en utilisant tar zxvf
(en utilisant gzip en raison de l'habitude).
J'ai récemment obtenu un processeur quad core avec hyperthreading, j'ai donc 8 cœurs logiques, et je remarque que beaucoup de cœurs ne sont pas utilisés pendant la compression / décompression.
Existe-t-il un moyen d'utiliser les cœurs inutilisés pour le rendre plus rapide?
Réponses:
Vous pouvez utiliser pigz au lieu de gzip, qui effectue la compression gzip sur plusieurs cœurs. Au lieu d'utiliser l'option -z, vous le feriez passer par pigz:
Par défaut, pigz utilise le nombre de cœurs disponibles, ou huit s'il ne peut pas l'interroger. Vous pouvez demander plus avec -pn, par exemple -p 32. pigz a les mêmes options que gzip, vous pouvez donc demander une meilleure compression avec -9. Par exemple
la source
Vous pouvez également utiliser l'indicateur tar "--use-compress-program =" pour indiquer à tar quel programme de compression utiliser.
Par exemple, utilisez:
la source
tar - dir_to_zip | pv | pigz > tar.file
pv m'aide à estimer, vous pouvez le sauter. Mais il est toujours plus facile d'écrire et de se souvenir.man tar
le dit, tout comme cela .zstd
est l'outil le plus rapide pour ce faire. Accélération notable lors de la compression et de la décompression. Utiliseztar -cf --use-compress-program=zstdmt
-le pour le multi-threading.Approche commune
Il y a une option pour le
tar
programme:Vous pouvez utiliser la version multithread de l'utilitaire d'archivage ou de compression.
Les archiveurs multithread les plus populaires sont pigz (au lieu de gzip) et pbzip2 (au lieu de bzip2). Par exemple:
L'archiveur doit accepter -d. Si votre utilitaire de remplacement n'a pas ce paramètre et / ou si vous devez spécifier des paramètres supplémentaires, utilisez des tuyaux (ajoutez des paramètres si nécessaire):
L'entrée et la sortie du fil unique et du multithread sont compatibles. Vous pouvez compresser en utilisant la version multithread et décompresser en utilisant la version single thread et vice versa.
p7zip
Pour p7zip pour la compression, vous avez besoin d'un petit script shell comme suit:
Enregistrez-le sous 7zhelper.sh. Voici l'exemple d'utilisation:
xz
Concernant le support XZ multithread. Si vous utilisez la version 5.2.0 ou supérieure de XZ Utils, vous pouvez utiliser plusieurs cœurs pour la compression en définissant
-T
ou--threads
à une valeur appropriée via la variable d'environnement XZ_DEFAULTS (par exempleXZ_DEFAULTS="-T 0"
).Ceci est un fragment de l'homme pour la version 5.1.0alpha:
Cependant, cela ne fonctionnera pas pour la décompression de fichiers qui n'ont pas également été compressés avec le threading activé. De l'homme pour la version 5.2.2:
Recompilation avec remplacement
Si vous construisez tar à partir de sources, vous pouvez recompiler avec des paramètres
Après avoir recompilé tar avec ces options, vous pouvez vérifier la sortie de l'aide de tar:
la source
pigz
) n'est activée que lors de la lecture du fichier. Le traitement de STDIN peut en fait être plus lent.xz
option. C'est l'approche la plus simple mais efficace.export XZ_DEFAULTS="-T 0"
avant d'appelertar
avec l'option-J
pour la compression xz fonctionne comme un charme.Vous pouvez utiliser le raccourci
-I
pour le--use-compress-program
commutateur tar et invoquerpbzip2
pour la compression bzip2 sur plusieurs cœurs:la source
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Si vous voulez avoir plus de flexibilité avec les noms de fichiers et les options de compression, vous pouvez utiliser:
Étape 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Cette commande recherchera les fichiers que vous souhaitez archiver, dans ce cas
/my/path/*.sql
et/my/path/*.log
. Ajoutez-en autant-o -name "pattern"
que vous le souhaitez.-exec
exécutera la commande suivante en utilisant les résultats defind
:tar
Étape 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
est un simple paramètre de remplacement de chaîne. Il supprimera le chemin des fichiers de l'archive afin que la racine de l'archive devienne le répertoire courant lors de l'extraction. Notez que vous ne pouvez pas utiliser l'-C
option pour changer de répertoire car vous perdrez les avantages defind
: tous les fichiers du répertoire seraient inclus.-P
indiquetar
d'utiliser des chemins absolus, de sorte qu'il ne déclenche pas l'avertissement "Suppression de la première ligne" / "des noms de membres". '/' En tête avec être supprimé de--transform
toute façon.-cf -
indiquetar
d'utiliser le nom tarball que nous spécifierons plus tard{} +
utilise tous les fichiersfind
trouvés précédemmentÉtape 3:
pigz
pigz -9 -p 4
Utilisez autant de paramètres que vous le souhaitez. Dans ce cas,
-9
c'est le niveau de compression et-p 4
c'est le nombre de cœurs dédiés à la compression. Si vous l'exécutez sur un serveur Web lourdement chargé, vous ne voudrez probablement pas utiliser tous les cœurs disponibles.Étape 4: nom de l'archive
> myarchive.tar.gz
Finalement.
la source
Un outil de (dé) compression relativement récent que vous pourriez envisager est zstandard . Il fait un excellent travail en utilisant des cœurs de rechange, et il a fait de grands compromis en termes de taux de compression par rapport au temps de (dé) compression. Il est également hautement ajustable en fonction de vos besoins en taux de compression.
la source