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:

  1. Raportul de compresie (de exemplu, cât de mic este compresorul de date);
  2. Timpul de decompresie (cerințe CPU) ;
  3. Cerințe privind memoria de decompresie; și
  4. 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

  • Ei bine, unele gudroane au o opțiune z.
  • ” speed ” oferă un răspuns confuz, ar trebui să vă referiți la viteza de compresie sau viteza de decompresie. Nici pixz, pbzi p2 sau pigz sunt instalate în mod implicit (sau utilizate de tar fără semnalizatorul -I), dar pixz și pbzip2 accelerează compresia și decompresia, iar pigz este doar pentru comprimare.
  • @Tobu xz va fi multithread în mod implicit, deci nu va fi necesară instalarea pixz în viitor. Pe unele platforme xz threading-ul este deja acceptat. Întrucât bzip2 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 folosind pbzip2 ceea ce nu este adesea cazul.
  • @Marco Cred că lbzip2 permite decompresia paralelă a fișierelor chiar dacă acestea au fost comprimate cu o implementare non-paralelă (de ex. Stock bzip2). Acesta este ‘ de ce folosesc lbzip2 peste pbzip2. (Este ‘ posibil ca acest lucru să fi evoluat de la comentariul dvs.)
  • 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 lansat i7-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ă

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *