Quels outils de compression sont disponibles dans Ubuntu et peuvent tirer parti d'un processeur multicœur.
Il y a deux outils principaux. lbzip2
and pbzip2
. Ce sont essentiellement des implémentations différentes des compresseurs bzip2. Je les ai comparés (la sortie est une version ordonnée mais vous devriez pouvoir exécuter les commandes)
cd /dev/shm # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400
$ lbzip2 -zk bigfile
Time: 0m3.596s
Size: 105335428
$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460
lbzip2
semble être le gagnant sur des données aléatoires. C'est un peu moins compressé mais beaucoup plus rapide. YMMV.
Eh bien, le mot clé était parallèle. Après avoir cherché tous les outils de compression qui étaient aussi parallèle j'ai trouvé ce qui suit:
PXZ - Parallel XZ est un utilitaire de compression qui tire parti de l’exécution de la compression LZMA de différentes parties d’un fichier d’entrée sur plusieurs cœurs et processeurs simultanément. Son objectif principal est d'utiliser toutes les ressources pour accélérer le temps de compression avec une influence minimale possible sur le taux de compression.
Sudo apt-get install pxz
PLZIP - Lzip est un compresseur de données sans perte basé sur l'algorithme LZMA, avec un contrôle d'intégrité très sûr et une interface utilisateur similaire à celle de gzip ou bzip2. Lzip décompresse presque aussi vite que gzip et compresse mieux que bzip2, ce qui le rend bien adapté à la distribution de logiciels et à l'archivage de données.
Plzip est une version massivement parallèle (multi-threadée) de lzip utilisant le format de fichier lzip. les fichiers produits par plzip sont entièrement compatibles avec lzip.
Plzip est conçu pour accélérer la compression/décompression de gros fichiers sur des ordinateurs multiprocesseurs, ce qui le rend particulièrement bien adapté à la distribution de gros fichiers logiciels et à l'archivage de données à grande échelle. Sur des fichiers assez volumineux, plzip peut utiliser des centaines de processeurs.
Sudo apt-get install plzip
PIGZ - pigz, qui signifie implémentation parallèle de GZip, est un remplacement entièrement fonctionnel de gzip qui tire parti de plusieurs processeurs et de plusieurs cœurs lors de la compression des données.
Sudo apt-get install pigz
PBZIP2 - pbzip2 est une implémentation parallèle du compresseur de fichiers de tri par blocs bzip2 qui utilise des pthreads et permet une accélération quasi linéaire sur les machines SMP. La sortie de cette version est entièrement compatible avec bzip2 v1.0.2 (c.-à-d. Que tout ce qui est compressé avec pbzip2 peut être décompressé avec bzip2).
Sudo apt-get install pbzip2
LRZIP - Programme de compression multithread pouvant atteindre des taux de compression et une vitesse très élevés lorsqu'il est utilisé avec des fichiers volumineux. Il utilise les algorithmes de compression combinés de zpaq et de lzma pour une compression maximale, de lzo pour une vitesse maximale et de la réduction de la redondance à longue portée de rzip. Il est conçu pour évoluer progressivement avec la taille RAM, ce qui améliore encore la compression. Un choix d'optimisations de taille ou de vitesse permet d'obtenir une meilleure compression que même celle fournie par lzma, ou une vitesse supérieure à celle de gzip, mais avec des niveaux de compression de taille bzip2.
Sudo apt-get install lrzip
Un petit test de compression (utilisant le test créé par Oli):
Taille originale du fichier - 100 MB
PBZIP2 - 101 Mo (1% plus grand)
PXZ - 101 Mo (1% plus grand)
PLZIP - 102 Mo (1% plus grand)
LRZIP - 101 Mo (1% plus grand)
PIGZ - 101 Mo (1% plus grand)
Un petit test de compression (à l'aide d'un fichier texte):
TAILLE DU FICHIER ORIGINAL - 70 Ko Fichier texte
PBZIP2 - 16,1 KB (23%)
PXZ - 15,4 KB (22%)
PLZIP - 15,5 KB (22,1%)
LRZIP - 15.3 KB (21.8%)
PIGZ - 17,4 KB (24,8%)
En plus du résumé de Nice ci-dessus (merci Luis), les gens de nos jours pourraient aussi vouloir considérer PIXZ, qui selon son README (Source: https://github.com/vasi/pixz - Je n'ai pas vérifié les déclarations moi-même) présente certains avantages par rapport à PXZ.
[Compared to PIXZ, PXZ has these advantages and disadvantages:]
* Simpler code
* Uses OpenMP instead of pthreads
* Uses streams instead of blocks, not indexable
* Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage
En d'autres termes, PIXZ est censé être plus efficace en termes de mémoire et de disque et dispose d'une fonctionnalité d'indexation facultative qui accélère la décompression de composants individuels de fichiers tar compressés.
XZ Utils prend en charge la compression multi-thread depuis la version 5.2.0. Elle était à l'origine documentée à tort comme étant une décompression multi-thread.
Par exemple: tar -cf - source | xz --threads=0 > destination.tar.xz
lzop peut également être une option viable, bien qu’il soit mono-thread.
Il utilise l'algorithme de compression très très rapide lempel-ziv-oberhumer qui est 5-6 fois plus rapide que gzip dans mon observation.
Remarque: Bien qu'il ne soit pas encore multi-threadé, il sera probablement plus performant que pigz sur les systèmes à 1 ou 4 systèmes. C'est pourquoi j'ai décidé de poster ceci même si cela ne répond pas directement à votre question. Essayez-le, cela pourrait résoudre votre problème de goulot d'étranglement du processeur en utilisant un seul processeur et en compressant un peu moins bien. J'ai souvent trouvé que c'était une meilleure solution que, par exemple, pigz.
Ce n'est pas vraiment une réponse, mais je pense qu'il est suffisamment pertinent pour partager mes points de repère comparant les vitesses de gzip
et pigz
sur un disque réel dans un scénario réel. Comme pigz
est l’évolution multithread que j’ai personnellement choisi d’utiliser désormais.
Métadonnées:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c/8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
version: 1.6
pigz
version: 2.4
gzip
rapide
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
meilleur
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
rapide
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
meilleur (non zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
algorithme pigz
+ zopfli
time pigz -11kMN ./db_dump.sql
real 171m33,501s
user 1321m36,144s
sys 0m29,780s
En fin de compte, je ne recommanderais pas l'algorithme zopfli
car la compression prenait énormément de temps pour une quantité d'espace disque non négligeable.
Taille des fichiers résultants:
Le compresseur LZMA2 de p7Zip utilise les deux cœurs de mon système.
Zstandard supporte le multi-threading depuis v1.2. ¹. C'est un compresseur et un décompresseur très rapide destiné à remplacer gzip. Il peut également compresser aussi efficacement, sinon mieux, que LZMA2/XZ à son plus haut niveau.
Vous devez utiliser astucieux ou une version plus récente, ou compiler la version la plus récente à partir des sources pour obtenir ces avantages. Heureusement, cela ne génère pas beaucoup de dépendances.