Tot mai multe tar
utilizați formatul xz
bazat pe LZMA2 pentru compresie în locul tradiționalului bzip2(bz2)
compresie. De fapt, kernel.org a făcut un anunț târziu „ Good-bye bzip2 ” , 27 decembrie 2013 , indicând sursele kernel-ului, din acest moment vor fi lansate atât în format tar.gz, cât și în format tar.xz – și pe pagina principală a site-ului , ce este direct oferit este în tar.xz
.
Există motive specifice care să explice de ce se întâmplă acest lucru și care este relevanța gzip
în acest context?
Răspuns
Pentru distribuire arhive pe Internet, următoarele lucruri sunt în general o prioritate:
- Raportul de compresie (de exemplu, cât de mic este compresorul de date);
- Timpul de decompresie (cerințe CPU) ;
- Cerințe privind memoria de decompresie; și
- Compatibilitate (cât de extins este programul de decompresie)
Memorie de compresie & Cerințele procesorului nu sunt” t foarte important, deoarece puteți utiliza o mașină rapidă mare pentru asta și trebuie să o faceți o singură dată.
Comparativ cu bzip2, xz are un raport de compresie mai bun și un timp de decompresie mai mic (mai bun). Totuși – la setările de compresie utilizate în mod obișnuit – necesită mai multă memorie pentru a decomprima [1] și este oarecum mai puțin răspândită. Gzip folosește mai puțină memorie decât oricare dintre ele.
Deci, atât arhivele în format gzip cât și xz sunt postate, permițându-vă să alegeți:
- Necesitatea decomprimării pe o mașină cu memorie foarte limitată (< 32 MB): gzip. Dat, nu foarte probabil când vorbim despre sursele de nucleu.
- Trebuie să decomprimăm instrumentele minime disponibile: gzip
- Doriți să economisiți timpul de descărcare și / sau lățimea de bandă: xz
Nu există o combinație realistă de factori care te-ar determina să alegi bzip2. Așadar, este eliminat treptat.
Am analizat comparațiile de compresie în o postare de blog . Nu am încercat să replic rezultatele și bănuiesc că unele dintre ele s-au schimbat (mai ales, mă aștept ca xz
să se îmbunătățească, fiind cel mai nou.)
(Există unele scenarii specifice în care o implementare bzip2 bună poate fi preferabilă xz: bzip2 poate comprima un fișier cu o mulțime de zerouri și secvențe de ADN genomic mai bune decât xz. Versiunile mai noi ale xz au acum un mod de blocare (opțional) care permite date recuperare după punctul de corupție și compresie paralelă și [în teorie] decompresie. Anterior, numai bzip2 le oferea. [2] Cu toate acestea, niciuna dintre acestea nu este relevantă pentru distribuția nucleului)
1: în dimensiunea arhivei, xz -3
este în jur de bzip -9
. Apoi xz folosește mai puțină memorie pentru a decomprima. Dar xz -9
(cum ar fi, de exemplu, folosit pentru tarball-urile kernel-ului Linux) folosește mult mai mult decât bzip -9
. (Și chiar xz -0
are nevoie de mai mult de gzip -9
).
2: F21 Schimbare la nivel de sistem: lbzip2 ca implementare implicită a bzip2
Comentarii
- Orice comentariu pe tema toleranță la eroare sau este ceva care ‘ este implementat întotdeauna complet în afara algoritmilor de compresie?
- @illumin nu poate fi ‘ oferită fără a sacrifica raportul de compresie. ‘ este o problemă ortogonală și, deși există instrumente precum Parchive, pentru distribuirea nucleului TCP ‘, gestionarea erorilor face treaba la fel Ei bine.
- @illumin É Toleranță la erori (presupunând că vrei să spui ceva similar cu par2) nu este ‘ în mod normal preocuparea cu distribuirea arhivelor pe internet. Descărcările sunt considerate suficient de fiabile (și puteți descărca din nou dacă a fost corupt). Hash-urile și semnăturile criptografice sunt adesea folosite și detectează corupția, precum și manipularea. Există compresoare care oferă o toleranță mai mare la defecțiuni, deși costă raportul de compresie. Nimeni nu pare să găsească compensarea care merită pentru descărcările HTTP sau FTP.
- xz folosește LESS memory pentru a decomprima.
- @Mike S-a schimbat de când am scris asta? În special, nota de subsol una explică utilizarea memoriei.
Răspuns
În primul rând, această întrebare nu are legătură directă la tar
. Tar creează doar o arhivă necomprimată, comprimarea este apoi aplicată mai târziu.
Se știe că Gzip este relativ rapid în comparație cu LZMA2 și bzip2. Dacă viteza contează, gzip
(în special implementarea cu mai multe fire pigz
) este adesea un bun compromis între viteza de compresie și raportul de compresie. Deși există alternative dacă viteza este o problemă (de exemplu, LZ4).
Cu toate acestea, dacă se dorește un raport de compresie ridicat, LZMA2 bate bzip2
în aproape toate aspectele. Viteza de compresie este adesea mai lentă, dar se decomprimă mult mai repede și oferă un raport de compresie mult mai bun cu prețul utilizării mai mari a memoriei.
Nu există prea multe motive pentru a utiliza bzip2
oricum, cu excepția compatibilității cu versiunile anterioare. Mai mult, LZMA2 a fost conceput cu multithreading în minte și multe implementări folosesc în mod implicit procesoare multicore (din păcate xz
pe Linux nu face acest lucru încă). Acest lucru are sens, deoarece viteza ceasului nu va crește, dar numărul de nuclee va crește.
Există implementări bzip2
cu mai multe fire (de exemplu, pbzip
), dar adesea nu sunt instalate în mod prestabilit. Rețineți că bzip2
plătiți cu adevărat numai în timp ce comprimați , în timp ce decompresia utilizează un singur fir dacă fișierul a fost comprimat utilizând un singur fir bzip2
, spre deosebire de LZMA2. Paralel bzip2
variantele pot beneficia de procesoare multicore numai dacă fișierul a fost comprimat utilizând o versiune paralelă bzip2
, ceea ce nu este adesea cazul.
Comentarii
Răspuns
LZMA2 este un sistem de compresie a blocurilor întrucât gzip nu este. Aceasta înseamnă că LZMA2 se pretează la multi-threading. De asemenea, dacă apare o corupție într-o arhivă, puteți recupera în general datele din blocurile ulterioare cu LZMA2, dar nu puteți face acest lucru cu gzip. În practică, pierzi întreaga arhivă cu gzip după blocul corupt. Cu o arhivă LZMA2, pierdeți numai fișierele afectate de blocurile deteriorate. Acest lucru poate fi important în arhivele mai mari cu mai multe fișiere.
Comentarii
- Aceasta este o distincție foarte utilă și importantă, într-adevăr!
- Puteți face copii de rezervă ale acestor afirmații cu surse? Încă nu am văzut un instrument de recuperare XZ, iar sursa mea cunoscută susține altfel: nongnu.org/lzip/xz_inadequate.html
Răspuns
Răspuns scurt : xz este mai eficient în ceea ce privește raportul de compresie. Astfel, economisește spațiu pe disc și optimizează transferul prin rețea.
Puteți vedea acest Quick Benchmark pentru a descoperi diferența prin teste practice.
Comentarii
- Linkul este întrerupt.
- Link nou: catchchallenger.first -world.info/wiki/…
z
.xz
va fi multithread în mod implicit, deci nu va fi necesară instalareapixz
în viitor. Pe unele platformexz
threading-ul este deja acceptat. Întrucâtbzip2
va fi puțin probabil să fie multithread, deoarece formatul nu a fost ‘ t conceput cu multithreading în minte. Mai mult,pbzip2
accelerează decompresia numai dacă fișierul a fost comprimat folosindpbzip2
ceea ce nu este adesea cazul.This makes sense since the clock speeds won't increase any more
– ce? că ‘ nu este chiar adevărat. postarea a fost făcută în 2014, când Intel a lansat i3-4370 la 3.8GHz. în 2017, Intel a lansati7-8700K
la 4,7 GHz. în 2018 au lansat i9-9900K la 5GHz – și acolo ‘ probabil că în 2015 & 2016 că ‘ lipsește și pe această listă