Outils de compression multi-cœur

49

Quels sont les outils de compression disponibles dans Ubuntu qui peuvent bénéficier d’un processeur multicœur.

    
posée Luis Alvarado 19.02.2013 - 13:50
la source

8 réponses

27

Il existe deux outils principaux. lbzip2 et pbzip2 . Ils sont essentiellement différentes implémentations de compresseurs bzip2. Je les ai comparés (la sortie est une version rangé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 légèrement moins compressé mais beaucoup plus rapide. YMMV.

    
réponse donnée Oli 19.02.2013 - 14:14
la source
64

Eh bien, le mot-clé était parallèle . Après avoir recherché tous les outils de compression qui étaient également parallèles , j'ai trouvé ce qui suit:

PXZ - Parallel XZ est un utilitaire de compression qui tire parti de l'exécution de LZMA compression 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 minime possible sur la compression ratio.

sudo apt-get install pxz

PLZIP - Lzip est un compresseur de données sans perte basé sur l’algorithme LZMA, avec une très grande sécurité. vérification de l'intégrité 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 des données.

Plzip est une version massivement parallèle (multi-thread) de lzip utilisant le lzip format de fichier; 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 machines multiprocesseurs, ce qui le rend particulièrement bien adapté à la distribution de gros fichiers logiciels et d’archivage de données à grande échelle. Sur des fichiers assez gros, plzip peut utiliser des centaines de processeurs.

sudo apt-get install plzip

PIGZ - pigz, qui signifie "mise en œuvre parallèle de GZip", est un outil entièrement fonctionnel. remplacement pour gzip qui profite de plusieurs processeurs et multiples cores lors de la compression des données.

sudo apt-get install pigz

PBZIP2 - pbzip2 est une implémentation parallèle du fichier de tri de blocs bzip2 compresseur qui utilise pthreads et réalise une accélération quasi-linéaire sur SMP Machines. La sortie de cette version est entièrement compatible avec bzip2 v1.0.2 (c’est-à-dire que tout élément compressé avec pbzip2 peut être décompressé avec bzip2).

sudo apt-get install pbzip2

LRZIP : programme de compression multithread capable d’obtenir une compression très élevée ratios et la vitesse lorsqu'il est utilisé avec des fichiers volumineux. Il utilise le combiné algorithmes de compression de zpaq et lzma pour une compression maximale, lzo pour la vitesse maximale et la réduction de la redondance à longue distance du rzip. Il est conçu pour évoluer avec l’augmentation de la taille de la RAM, ce qui améliore compression supplémentaire. Un choix d'optimisations de taille ou de vitesse permet soit une meilleure compression que même lzma peut fournir, ou meilleure vitesse que gzip, mais avec des niveaux de compression de taille bzip2.

sudo apt-get install lrzip

Un petit benchmark de compression (en utilisant le test créé par Oli):

TAILLE DU FICHIER ORIGINAL - 100 Mo
PBZIP2 - 101 Mo (1% plus gros)
PXZ - 101 Mo (1% plus gros)
PLZIP - 102 Mo (1% plus gros)
LRZIP - 101 Mo (1% plus gros)
PIGZ - 101 Mo (1% plus gros)

Un petit benchmark de compression (à l’aide d’un fichier texte):

TAILLE DU FICHIER ORIGINAL - Fichier texte de 70 Ko
PBZIP2 - 16,1 Ko (23%)
PXZ - 15,4 Ko (22%)
PLZIP - 15,5 Ko (22,1%)
LRZIP - 15,3 Ko (21,8%)
PIGZ - 17,4 Ko (24,8%)

    
réponse donnée Luis Alvarado 19.02.2013 - 15:22
la source
10

En plus du bon résumé ci-dessus (merci Luis), les gens voudront peut-être aussi envisager PIXZ, qui est README d'après lui (Source: lien - Je n'ai pas vérifié les réclamations 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 des composants individuels des fichiers tar compressés.

    
réponse donnée nturner 14.12.2013 - 20:56
la source
6

Mise à jour:

XZ Utils prend en charge la compression multithread depuis v5.2.0, il était à l'origine documenté par erreur comme étant une décompression multithread.

Par exemple: tar -cf - source | xz --threads=0 > destination.tar.xz

    
réponse donnée donbradken 09.12.2016 - 16:33
la source
4

lzop peut également être une option viable, bien que c'est mono-thread.

Il utilise le rapide très lempel-ziv -oberhumer algorithme de compression qui est 5-6 fois plus rapide que gzip dans mon observation.

Note: Bien qu’il ne soit pas encore multithread, il surperformera probablement le pigz sur les systèmes 1 à 4 cœurs. C'est pourquoi j'ai décidé de poster ceci même s'il ne répond pas directement à votre question. Essayez-le, cela peut résoudre votre problème de goulot d'étranglement du processeur en n'utilisant qu'un seul processeur et en compressant un peu moins. J'ai souvent trouvé que c'était une meilleure solution que, par exemple, pigz.

    
réponse donnée ce4 25.02.2014 - 13:48
la source
3

Le compresseur LZMA2 de p7zip utilise les deux cœurs sur mon système.

    
réponse donnée David Foerster 14.12.2013 - 23:35
la source
2

Ce n’est pas vraiment une réponse, mais je pense qu’il est suffisamment pertinent pour partager mes tests comparant la vitesse de gzip et de pigz sur un véritable matériel informatique dans un scénario réel. Comme pigz est l’évolution multithread que j’ai personnellement choisi d’utiliser désormais.

Métadonnées:

  • Matériel utilisé: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (4c / 8t) + Nvme SSD
  • Distribution GNU / Linux: Xubuntu 17.10 (artful)
  • gzip version: 1.6
  • pigz version: 2.4
  • Le fichier en cours de compression est 9.25 GiB SQL dump

gzip quick

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip best

time gzip -9kN ./db_dump.sql 

real    10m6,709s
user    10m2,710s
sys     0m3,828s

pigz quick

time pigz -1kMN ./db_dump.sql 

real    0m26,610s
user    1m55,389s
sys     0m6,175s

pigz best (pas de 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 résumé, je ne recommanderais pas l’algorithme zopfli car la compression a pris énormément de temps pour une quantité d’espace disque non négligeable.

Taille des fichiers résultants:

  • best s: 1309M
  • rapide s: 1680M
  • zopfli : 1180M
réponse donnée helvete 19.01.2018 - 16:39
la source
1

Zstandard prend en charge le multithreading depuis v1.2.0 ¹. C'est un compresseur et décompresseur très rapide destiné à remplacer gzip et il peut aussi compresser aussi efficacement - sinon mieux - que LZMA2 / XZ à ses plus hauts niveaux.

Vous devez utiliser artful ou une nouvelle version, ou compiler la version la plus récente pour obtenir ces avantages. Heureusement, il n'y a pas beaucoup de dépendances.

  1. Il y avait aussi un pzstd tiers dans la v1.1.0 de zstd.
réponse donnée LiveWireBT 26.07.2017 - 22:17
la source

Lire d'autres questions sur les étiquettes