De plus en plus darchives tar
utilisez le format xz
basé sur LZMA2 pour la compression au lieu du format traditionnel bzip2(bz2)
compression. En fait, kernel.org a fait une annonce tardive « Good-bye bzip2 » , le 27 décembre 2013 , indiquant que les sources du noyau seraient à partir de maintenant publiées au format tar.gz et tar.xz – et sur la page principale du site Web quest-ce que cest directement proposé est en tar.xz
.
Y a-t-il des raisons spécifiques expliquant pourquoi cela se produit et quelle est la pertinence de gzip
dans ce contexte?
Réponse
Pour la distribution les archives sur Internet, les choses suivantes sont généralement une priorité:
- Taux de compression (cest-à-dire la taille des données par le compresseur);
- Temps de décompression (exigences du processeur) ;
- Besoins en mémoire de décompression; et
- Compatibilité (étendue du programme de décompression)
Mémoire de compression & Les exigences du processeur ne sont pas » t très important, car vous pouvez utiliser une grosse machine rapide pour cela, et vous navez à le faire quune seule fois.
Comparé à bzip2, xz a un meilleur taux de compression et un (meilleur) temps de décompression. Cependant, avec les paramètres de compression généralement utilisés, il nécessite plus de mémoire pour décompresser [1] et est un peu moins répandu. Gzip utilise moins de mémoire que lun ou lautre.
Ainsi, les archives au format gzip et xz sont affichées, vous permettant de choisir:
- Besoin de décompresser sur une machine avec Mémoire très limitée (< 32 Mo): gzip. Étant donné, peu probable quand on parle des sources du noyau.
- Besoin de décompresser les outils minimaux disponibles: gzip
- Vous voulez gagner du temps de téléchargement et / ou de la bande passante: xz
Il ny a pas vraiment de combinaison réaliste de facteurs qui vous inciteraient à choisir bzip2. Il est donc en cours de suppression.
Jai examiné les comparaisons de compression dans un article de blog . Je nai pas tenté de reproduire les résultats, et je soupçonne que certains dentre eux ont changé (surtout, je pense que xz
sest amélioré, car cest le plus récent.)
(Il existe des scénarios spécifiques où une bonne implémentation de bzip2 peut être préférable à xz: bzip2 peut compresser un fichier avec beaucoup de zéros et des séquences dADN génomique mieux que xz. Les nouvelles versions de xz ont maintenant un mode bloc (optionnel) qui autorise les données récupération après le point de corruption et compression parallèle et [en théorie] décompression. Auparavant, seul bzip2 offrait ces derniers. [2] Cependant, aucun dentre eux nest pertinent pour la distribution du noyau)
1: Dans la taille de larchive, xz -3
est denviron bzip -9
. Ensuite, xz utilise moins de mémoire pour décompresser. Mais xz -9
(comme, par exemple, utilisé pour les archives tar du noyau Linux) utilise beaucoup plus que bzip -9
. (Et même xz -0
nécessite plus de gzip -9
).
2: F21 Changement à léchelle du système: lbzip2 comme implémentation par défaut de bzip2
Commentaires
- Tout commentaire sur le sujet de tolérance aux pannes ou est-ce quelque chose que ‘ est toujours implémenté complètement en dehors des algorithmes de compression?
- @illumin É la résilience peut ‘ t être fournie sans sacrifier le taux de compression. Cest ‘ un problème orthogonal, et bien que des outils comme Parchive existent, pour distribuer le noyau TCP ‘ la gestion des erreurs fait le travail tout comme
- @illumin É La tolérance aux pannes (en supposant que vous vouliez dire quelque chose de similaire à par2) nest pas ‘ t normalement a souci de distribution des archives sur Internet. Les téléchargements sont supposés suffisamment fiables (et vous pouvez simplement télécharger à nouveau sil a été corrompu). Les hachages et signatures cryptographiques sont souvent utilisés et détectent la corruption ainsi que la falsification. Il existe des compresseurs qui offrent une plus grande tolérance aux pannes, mais au prix du taux de compression. Personne ne semble trouver le compromis qui en vaut la peine pour les téléchargements HTTP ou FTP.
- xz utilise MOINS de mémoire pour décompresser.
- @Mike Cela a-t-il changé depuis que jai écrit ceci? En particulier, la note de bas de page 1 explique lutilisation de la mémoire.
Réponse
Tout dabord, cette question nest pas directement liée à tar
. Tar crée simplement une archive non compressée, la compression est ensuite appliquée plus tard.
Gzip est connu pour être relativement rapide par rapport à LZMA2 et bzip2. Si la vitesse compte, gzip
(en particulier limplémentation multithread pigz
) est souvent un bon compromis entre vitesse de compression et taux de compression. Bien quil existe des alternatives si la vitesse est un problème (par exemple LZ4).
Cependant, si un taux de compression élevé est souhaité, LZMA2 bat bzip2
dans presque tous les aspects. La vitesse de compression est souvent plus lente, mais elle se décompresse beaucoup plus rapidement et offre un bien meilleur taux de compression au prix dune utilisation plus élevée de la mémoire.
Il ny a pas beaucoup de raison dutiliser bzip2
plus, sauf pour la rétrocompatibilité. De plus, LZMA2 a été conçu avec le multithreading à lesprit et de nombreuses implémentations utilisent par défaut des processeurs multicœurs (malheureusement xz
sous Linux ne le fait pas encore). Cela a du sens puisque les vitesses dhorloge « naugmenteront plus mais le nombre de cœurs le fera.
Il existe des implémentations multithread bzip2
(par exemple pbzip
), mais ils ne sont souvent pas installés par défaut. Notez également que le multithread bzip2
ne paie vraiment que lors de la compression alors que la décompression utilise un seul thread si le fichier a été compressé avec un seul thread bzip2
, contrairement à LZMA2. Parallèle bzip2
Les variantes ne peuvent exploiter les processeurs multicœurs que si le fichier a été compressé en utilisant une version parallèle bzip2
, ce qui nest souvent pas le cas.
Commentaires
Réponse
LZMA2 est un système de compression de bloc alors que gzip ne lest pas. Cela signifie que LZMA2 se prête au multi-threading. De plus, si une corruption se produit dans une archive, vous pouvez généralement récupérer les données des blocs suivants avec LZMA2, mais vous ne pouvez pas le faire avec gzip. En pratique, vous perdez lintégralité de larchive avec gzip après le bloc corrompu. Avec une archive LZMA2, vous ne perdez que le (s) fichier (s) affecté (s) par le ou les blocs corrompus. Cela peut être important dans les archives plus volumineuses contenant plusieurs fichiers.
Commentaires
- Cest une distinction très utile et importante, en effet!
- Pouvez-vous étayer ces affirmations avec des sources? Je nai pas encore vu doutil de récupération XZ, et ma source connue prétend le contraire: nongnu.org/lzip/xz_inadéquate.html
Réponse
Réponse courte : xz est plus efficace en termes de taux de compression. Cela économise donc de lespace disque et optimise le transfert à travers le réseau.
Vous pouvez voir ce Quick Benchmark afin de découvrir la différence par des tests pratiques.
Commentaires
- Le lien est rompu.
- Nouveau lien: catchchallenger.first -world.info/wiki/…
z
.xz
sera multithread par défaut, donc aucune installation depixz
ne sera requise à lavenir. Sur certaines plates-formes, le threadxz
est déjà pris en charge. Alors quebzip2
sera probablement jamais multithread puisque le format na pas été ‘ conçu avec le multithreading à lesprit. De plus,pbzip2
naccélère la décompression que si le fichier a été compressé à laide depbzip2
ce qui nest souvent pas le cas.This makes sense since the clock speeds won't increase any more
– quoi? que ‘ nest pas tout à fait vrai. le message a été publié en 2014, lorsque Intel a publié le i3-4370 à 3,8 GHz. en 2017, Intel a publié lei7-8700K
à 4,7 GHz. en 2018, ils ont sorti le i9-9900K à 5 GHz – et il y a ‘ probablement des processeurs en 2015 & 2016 que ‘ est également absent de cette liste