W przypadku dystrybucji archiwów przez Internet na ogół priorytetem są następujące rzeczy:
- Współczynnik kompresji (tj. Jak mały kompresor tworzy dane);
- Czas dekompresji (wymagania dotyczące procesora);
- Wymagania dotyczące pamięci dekompresyjnej; i
- Kompatybilność (jak szeroki jest program dekompresyjny)
Wymagania dotyczące pamięci kompresyjnej i procesora nie są bardzo ważne, ponieważ możesz do tego użyć dużej, szybkiej maszyny i musisz to zrobić tylko raz.
W porównaniu do bzip2, xz ma lepszy współczynnik kompresji i krótszy (lepszy) czas dekompresji. Jednak przy zwykle używanych ustawieniach kompresji wymaga więcej pamięci do dekompresji [1] i jest nieco mniej rozpowszechniony. Gzip zużywa mniej pamięci niż oba.
Publikowane są archiwa w formacie gzip i xz, co pozwala wybrać:
- Potrzebujesz rozpakować na komputerze z bardzo ograniczoną pamięcią (<32 MB): gzip. Biorąc pod uwagę, mało prawdopodobne, gdy mówimy o źródłach jądra.
- Potrzebujesz zdekompresować minimalne dostępne narzędzia: gzip
- Chcesz zaoszczędzić czas pobierania i / lub przepustowość: xz
Tak naprawdę nie ma realistycznej kombinacji czynników, które skłoniłyby cię do wybrania bzip2. Więc jest stopniowo wycofywany.
Przejrzałem porównania kompresji w poście na blogu . Nie próbowałem powielać wyników i podejrzewam, że niektóre z nich uległy zmianie (głównie spodziewam xz
się poprawy, ponieważ jest to najnowsza wersja).
(Istnieją pewne konkretne scenariusze, w których dobra implementacja bzip2 może być lepsza niż xz: bzip2 może kompresować plik z dużą ilością zer i sekwencji DNA genomu lepiej niż xz. Nowsze wersje xz mają teraz (opcjonalny) tryb blokowania, który umożliwia odzyskiwanie danych po punkcie uszkodzenia i kompresji równoległej i [teoretycznie] dekompresji. Wcześniej tylko bzip2 je oferował. [2] Jednak żaden z nich nie jest istotny dla dystrybucji jądra)
1: W rozmiarze archiwum xz -3
jest około bzip -9
. Następnie xz zużywa mniej pamięci do dekompresji. Ale xz -9
(jak np. Używany w tarballach jądra Linuksa) używa znacznie więcej niż bzip -9
. (A nawet xz -0
potrzebuje więcej niż gzip -9
).
2: F21 System Wide Change: lbzip2 jako domyślna implementacja bzip2
Przede wszystkim pytanie to nie jest bezpośrednio związane
tar
. Tar po prostu tworzy nieskompresowane archiwum, a następnie kompresja jest stosowana.Gzip jest znany jako stosunkowo szybki w porównaniu do LZMA2 i bzip2. Jeśli prędkość ma znaczenie,
gzip
(szczególnie implementacja wielowątkowapigz
) jest często dobrym kompromisem między prędkością kompresji a współczynnikiem kompresji. Chociaż istnieją alternatywy, jeśli problemem jest prędkość (np. LZ4).Jeśli jednak pożądany jest wysoki stopień kompresji, LZMA2 bije
bzip2
prawie w każdym aspekcie. Szybkość kompresji jest często wolniejsza, ale dekompresuje się znacznie szybciej i zapewnia znacznie lepszy współczynnik kompresji kosztem wyższego zużycia pamięci.Nie ma już większego powodu, aby z niego korzystać
bzip2
, poza kompatybilnością wsteczną. Ponadto LZMA2 został zaprojektowany z myślą o wielowątkowości, a wiele implementacji domyślnie korzysta z procesorów wielordzeniowych (niestetyxz
na Linuksie jeszcze tego nie robi). Ma to sens, ponieważ prędkości zegara już nie wzrosną, ale liczba rdzeni wzrośnie.Istnieją
bzip2
implementacje wielowątkowe (np.pbzip
), Ale często nie są domyślnie instalowane. Zauważ również, że wielowątkowośćbzip2
naprawdę się opłaca podczas kompresji, podczas gdy dekompresja używa jednego wątku, jeśli plik był kompresowany przy użyciu jednego wątkubzip2
, w przeciwieństwie do LZMA2.bzip2
Warianty równoległe mogą wykorzystywać procesory wielordzeniowe tylko wtedy, gdy plik został skompresowany przy użyciubzip2
wersji równoległej , co często nie ma miejsca.źródło
z
opcję.xz
będzie domyślnie wielowątkowe, więcpixz
w przyszłości nie będzie wymagana instalacja. Na niektórych platformachxz
wątki są już obsługiwane. Natomiastbzip2
nigdy nie będzie wielowątkowości, ponieważ format nie został zaprojektowany z myślą o wielowątkowości. Co więcej,pbzip2
przyspiesza dekompresję tylko wtedy, gdy plik został skompresowany przy użyciu,pbzip2
co często nie jest prawdą.Krótka odpowiedź : xz jest bardziej wydajny pod względem współczynnika kompresji. Oszczędza to miejsce na dysku i optymalizuje transfer przez sieć.
Możesz zobaczyć ten Szybki Benchmark , aby odkryć różnicę poprzez testy praktyczne.
źródło
LZMA2 to system kompresji bloków, podczas gdy gzip nie. Oznacza to, że LZMA2 nadaje się do wielowątkowości. Ponadto, jeśli uszkodzenie wystąpi w archiwum, ogólnie można odzyskać dane z kolejnych bloków za pomocą LZMA2, ale nie można tego zrobić za pomocą gzip. W praktyce tracisz całe archiwum za pomocą gzip po uszkodzonym bloku. Dzięki archiwum LZMA2 tracisz tylko plik (i), na które wpływ mają uszkodzone bloki. Może to być ważne w większych archiwach z wieloma plikami.
źródło