Je me retrouve à devoir compresser un certain nombre de fichiers très volumineux (80 Go) et je suis surpris de la (manque de) vitesse de mon système. J'obtiens une vitesse de conversion d'environ 500 Mo / min; en utilisant top
, je semble utiliser un seul processeur à environ 100%.
Je suis sûr que ce n'est pas (seulement) la vitesse d'accès au disque, car la création d'un tar
fichier (c'est ainsi que le fichier 80G a été créé) n'a pris que quelques minutes (peut-être 5 ou 10), mais après plus de 2 heures, ma simple commande gzip est toujours pas fini.
En résumé:
tar -cvf myStuff.tar myDir/*
Il a fallu moins de 5 minutes pour créer un fichier tar 87 G
gzip myStuff.tar
A pris deux heures et 10 minutes, créant un fichier zip 55G.
Ma question: est-ce normal? Existe-t-il certaines options gzip
pour accélérer les choses? Serait-il plus rapide de concaténer les commandes et de les utiliser tar -cvfz
? J'ai vu une référence à pigz
- Mise en œuvre parallèle de GZip - mais malheureusement je ne peux pas installer de logiciel sur la machine que j'utilise, donc ce n'est pas une option pour moi. Voir par exemple cette question précédente .
J'ai l'intention d'essayer certaines de ces options moi-même et de les chronométrer - mais il est fort probable que je ne frapperai pas "la combinaison magique" des options. J'espère que quelqu'un sur ce site connaît la bonne astuce pour accélérer les choses.
Lorsque je disposerai des résultats d'autres essais, je mettrai à jour cette question - mais si quelqu'un a une astuce particulièrement intéressante, je l'apprécierais vraiment. Peut-être que le gzip prend juste plus de temps de traitement que je ne le pensais ...
MISE À JOUR
Comme promis, j'ai essayé les astuces suggérées ci-dessous: changer la quantité de compression et changer la destination du fichier. J'ai obtenu les résultats suivants pour un goudron d'environ 4,1 Go:
flag user system size sameDisk
-1 189.77s 13.64s 2.786G +7.2s
-2 197.20s 12.88s 2.776G +3.4s
-3 207.03s 10.49s 2.739G +1.2s
-4 223.28s 13.73s 2.735G +0.9s
-5 237.79s 9.28s 2.704G -0.4s
-6 271.69s 14.56s 2.700G +1.4s
-7 307.70s 10.97s 2.699G +0.9s
-8 528.66s 10.51s 2.698G -6.3s
-9 722.61s 12.24s 2.698G -4.0s
Alors oui, changer le drapeau par défaut -6
en le plus rapide -1
me donne une accélération de 30%, avec (pour mes données) pratiquement aucune modification de la taille du fichier zip. Que j'utilise le même disque ou un autre ne fait pratiquement aucune différence (je devrais l'exécuter plusieurs fois pour obtenir une signification statistique).
Si quelqu'un est intéressé, j'ai généré ces repères de synchronisation en utilisant les deux scripts suivants:
#!/bin/bash
# compare compression speeds with different options
sameDisk='./'
otherDisk='/tmp/'
sourceDir='/dirToCompress'
logFile='./timerOutput'
rm $logFile
for i in {1..9}
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $sameDisk $logFile
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $otherDisk $logFile
done
Et le deuxième script ( compressWith
):
#!/bin/bash
# use: compressWith sourceDir compressionFlag destinationDisk logFile
echo "compressing $1 to $3 with setting $2" >> $4
tar -c $1 | gzip -$2 > $3test-$2.tar.gz
Trois choses à noter:
- Utiliser
/usr/bin/time
plutôt quetime
, car la commande intégrée debash
comporte beaucoup moins d'options que la commande GNU - Je n'ai pas pris la peine d'utiliser l'
--format
option bien que cela rendrait le fichier journal plus facile à lire - J'ai utilisé un script dans un script car il
time
semblait ne fonctionner que sur la première commande d'une séquence piped (donc je l'ai fait ressembler à une seule commande ...).
Avec tout cela appris, mes conclusions sont
- Accélérez les choses avec le
-1
drapeau (réponse acceptée) - Beaucoup plus de temps est consacré à la compression des données qu'à la lecture à partir du disque
- Investissez dans un logiciel de compression plus rapide (
pigz
semble être un bon choix). - Si vous avez plusieurs fichiers à compresser, vous pouvez mettre chaque
gzip
commande dans son propre thread et utiliser plus de CPU disponible (pauvrepigz
)
Merci à tous ceux qui m'ont aidé à apprendre tout cela!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
vous montrera à quelle vitesse votre machine compresse les trucs. side-note2: stocker le résultat sur un disque différent.
man
page, et je n'ai pas lu jusqu'ici (car elle est triée par 'commande à lettre unique', qui est -#
) . Cela m'apprendra à RTFM! Ce sera la prochaine chose que j'essaierai!
pigz
et l'exécuter à partir de l'endroit où vous l'avez construit, sans l'installer. S'il n'y a pas de compilateur, vous pouvez le compiler de manière croisée sur un autre ordinateur, bien que cela commence à faire plus d'efforts que cela ne vaut la peine. (Je suppose que cela dépend à quel point vous avez besoin de cette compression pour fonctionner plus rapidement.)