LZMA
LZMA, pour Lempel-Ziv-Markov chain algorithm, est un algorithme de compression de données sans perte en développement jusqu'à 2001 et utilisé dans le format 7z du programme 7-Zip, StuffitX et quelques autres archiveurs, ainsi que par les commandes dédiées à la compression de données, xz et lzma. Il utilise une compression avec dictionnaire assez similaire au LZ77 et offre un fort taux de compression (en général plus fort que le Bzip2) et une taille variable de dictionnaire de compression (jusqu'à 4 Go).
Outre son taux de compression plus élevé, il a le double avantage d'être plus rapide que bzip2 pour les taux de compression faible, mais surtout d'être plus rapide que celui-ci lors de la décompression et à un taux de compression supérieur. En revanche, il a l'inconvénient d'être très lent et gourmand en mémoire durant la compression avec des taux de compression élevés. Lors de l'utilisation des taux de compression les plus forts (-9 et -e), il nécessite 311 Mio de RAM pour la compression et 33 Mio de RAM pour la décompression[1].
Une nouvelle version de LZMA, LZMA2, le remplace dans le format XZ, appelé à remplacer le format .lzma (apportant de nouvelles fonctionnalités, notamment la vérification d'intégrité). 7-Zip supporte le LZMA2 depuis la version 9.04 beta (sortie le ) et en a fait le format de compression par défaut depuis la version 9.30 alpha (sortie le )[2]. WinRAR permet la décompression des archives 7z utilisant le LZMA2 depuis la version 3.91 (sortie le )[3].
Usages
7-Zip est un archiveur utilisant par défaut la compression LZMA. Son auteur, le Russe Igor Pavlov, l'a créé autour du kit de développement LZMA. Le SDK et 7-zip ont été portés dans des environnements POSIX dans P7zip.
Le kit de développement fournissait dans ses premières versions, entre autres l'exécutable « lzma » qui est un simple compresseur de flux (utilitaire comparable à bzip2). L'outil lzma compresse les fichiers en ajoutant une extension .lzma à la fin du nom de fichier. L'utilisation de ce format de fichier est fortement déconseillée par les concepteurs[4], car ce format n'a pas de vérification d'intégrité des données. En particulier, l'outil lzma ignore toutes données supplémentaires à la fin du fichier; de telles données sont usuellement interprétées comme une erreur par les autres programmes du même type.
Les concepteurs ont donc créé une nouvelle version de leur kit, appelée xz, ajoutant une somme de contrôle d'intégrité aux fichiers. Ils recommandent l'utilisation de ces outils XZ, qui permettent entre autres d'utiliser l'algorithme LZMA, conjointement avec un algorithme de contrôle d'intégrité. Les outils xz possèdent une syntaxe semblable à celle des outils lzma et permettent de décompresser les fichiers à ce format.
L'outil pxz (pour « parallel xz » (« xz parallèle »en anglais) également présent dans 7-Zip permet d'effectuer une compression LZMA en la répartissant sur plusieurs processeurs. Cela a l'avantage d’accélérer ce type de compression sur les architectures multiprocesseurs, mais en raison de la taille variable des paquets traités dans cet algorithme, d'avoir un taux de compression moins efficace que la version uni-processeur[5].
Utilisations
Le fait d'avoir un très bon taux de compression et une excellente vitesse de décompression a permis à ce format d'être utilisé dans des formats de systèmes de fichiers compressés accédés en lecture seule.
LZMA peut être utilisé au-dessus de l'archiveur tar, à la façon de bzip2 ou gzip. Certaines versions de tar (celle de busybox par exemple) gèrent les archives LZMA (.tar.lzma).
Puisque LZMA gère nativement le multithreading cela peut être plus rapide qu'utiliser bzip2. Il existe aujourd'hui une version multithread de bzip2 sous le nom de pbzip2 qui apporte le même type de gain de vitesse.
Licence
Le SDK de LZMA est placé dans le domaine public depuis la version 4.62.
Notes et références
- (en) banc de test gzip/bzip2/LZMA.
- History of 7-zip changes
- Historique de WinRAR (version archivée)
- page de man du programme
- (en) PXZ - Parallel LZMA compressor using liblzma
Liens externes
- (en) le SDK LZMA
- (en) LZMA utils (licence GPL)
- (en) banc de test gzip/bzip2/LZMA
- (fr) Exemple d'implémentation de LZMA en Python
- (en) PXZ - Parallel LZMA compressor using liblzma
- (en) banc de test de plusieurs algorithmes de compression