Jakie narzędzia kompresji są dostępne w systemie Ubuntu, które mogą korzystać z wielordzeniowego procesora.
Jakie narzędzia kompresji są dostępne w systemie Ubuntu, które mogą korzystać z wielordzeniowego procesora.
Odpowiedzi:
Istnieją dwa główne narzędzia. lbzip2
a pbzip2
. Są to zasadniczo różne implementacje kompresorów bzip2. Porównałem je (wynik jest uporządkowaną wersją, ale powinieneś być w stanie uruchomić polecenia)
cd /dev/shm # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400
$ lbzip2 -zk bigfile
Time: 0m3.596s
Size: 105335428
$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460
lbzip2
wydaje się być zwycięzcą losowych danych. Jest nieco mniej skompresowany, ale znacznie szybszy. YMMV.
/dev/urandom
nie jest doskonałym wyborem danych wejściowych dla narzędzi do kompresji testów porównawczych, ponieważ dane losowe z definicji są nieściśliwe. To częściowo tłumaczy, dlaczego w obu przypadkach plik wyjściowy jest ~ 450 MB większy niż dane wejściowe.
00000000000000000000000000000000
. Tak działa losowość;) Mówisz o średnich praktycznych. Jest mało prawdopodobne , że wygenerujesz plik 100 MB zawierający tylko zera. I zgadzam się z duchem tego, co mówisz, po prostu nie zgadzam się z „z definicji”, ponieważ nie jest to definicja (ponieważ jest niedokładna).
wget http://mattmahoney.net/dc/enwik8.zip
Pobranie 96 MB (skompresowanego 21 MB) tekstu z Wikipedii. Aby uzyskać znacznie bardziej kompleksowy zestaw testów, zobacz tutaj .
Cóż, słowo kluczowe było równoległe . Po wyszukaniu wszystkich równoległych narzędzi do kompresji znalazłem:
PXZ - Parallel XZ to narzędzie do kompresji, które korzysta z uruchamiania kompresji LZMA różnych części pliku wejściowego na wielu rdzeniach i procesorach jednocześnie. Jego głównym celem jest wykorzystanie wszystkich zasobów w celu przyspieszenia czasu kompresji przy minimalnym możliwym wpływie na współczynnik kompresji.
sudo apt-get install pxz
PLZIP - Lzip to bezstratny kompresor danych oparty na algorytmie LZMA, z bardzo bezpiecznym sprawdzaniem integralności i interfejsem użytkownika podobnym do gzip lub bzip2. Lzip dekompresuje prawie tak szybko jak gzip i kompresuje lepiej niż bzip2, co czyni go dobrze przystosowanym do dystrybucji oprogramowania i archiwizacji danych.
Plzip jest masowo równoległą (wielowątkową) wersją lzip używającą formatu pliku lzip; pliki produkowane przez plzip są w pełni kompatybilne z lzip.
Plzip jest przeznaczony do szybszej kompresji / dekompresji dużych plików na maszynach wieloprocesorowych, co czyni go szczególnie odpowiednim do dystrybucji dużych plików oprogramowania i archiwizacji danych na dużą skalę. Na plikach wystarczająco dużych plzip może korzystać z setek procesorów.
sudo apt-get install plzip
PIGZ - pigz, co oznacza równoległe wdrożenie GZip, jest w pełni funkcjonalnym zamiennikiem gzip, który wykorzystuje wiele procesorów i wiele rdzeni podczas kompresji danych.
sudo apt-get install pigz
PBZIP2 - pbzip2 to równoległa implementacja kompresora plików do sortowania bloków bzip2, który wykorzystuje pthreads i osiąga prawie liniowe przyspieszenie na maszynach SMP. Dane wyjściowe tej wersji są w pełni kompatybilne z bzip2 v1.0.2 (tj. Wszystko skompresowane za pomocą pbzip2 może zostać zdekompresowane za pomocą bzip2).
sudo apt-get install pbzip2
LRZIP - Wielowątkowy program do kompresji, który może osiągać bardzo wysokie współczynniki kompresji i szybkość, gdy jest używany z dużymi plikami. Używa połączonych algorytmów kompresji zpaq i lzma dla maksymalnej kompresji, lzo dla maksymalnej prędkości i redukcji redundancji dalekiego zasięgu rzip. Jest przeznaczony do skalowania wraz ze wzrostem wielkości pamięci RAM, co dodatkowo poprawia kompresję. Wybór optymalizacji rozmiaru lub prędkości pozwala na lepszą kompresję niż nawet lzma może zapewnić, lub lepszą prędkość niż gzip, ale z poziomami kompresji wielkości bzip2.
sudo apt-get install lrzip
Mały test kompresji (za pomocą testu stworzonego przez Oli):
ORYGINALNY ROZMIAR PLIKU - 100 MB
PBZIP2 - 101 MB (1% większy)
PXZ - 101 MB (1% większy)
PLZIP - 102 MB (1% większy)
LRZIP - 101 MB (1% większy)
PIGZ - 101 MB (1% większy )
Mały test porównawczy kompresji (przy użyciu pliku tekstowego):
ROZMIAR PLIKU ORYGINALNEGO - 70 KB Plik tekstowy
PBZIP2 - 16,1 KB (23%)
PXZ - 15,4 KB (22%)
PLZIP - 15,5 KB (22,1%)
LRZIP - 15,3 KB (21,8%)
PIGZ - 17,4 KB (24,8%)
lrzip
mogą być pbzip2
na przykład nieskompresowane .
Oprócz powyższego miłego podsumowania (dzięki Luis), w dzisiejszych czasach ludzie mogą również rozważyć PIXZ, który zgodnie z jego README (źródło: https://github.com/vasi/pixz - sam nie zweryfikowałem roszczeń ) ma pewne zalety w stosunku do PXZ.
[Compared to PIXZ, PXZ has these advantages and disadvantages:]
* Simpler code
* Uses OpenMP instead of pthreads
* Uses streams instead of blocks, not indexable
* Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage
Innymi słowy, PIXZ jest podobno bardziej wydajny pod względem pamięci i dysku i ma opcjonalną funkcję indeksowania, która przyspiesza dekompresję poszczególnych składników skompresowanych plików tar.
pixz
archiwa nie są zgodne ze standardowym xz
formatem pxz
.
pixz
może dekompresować xz
archiwa i xz
dekompresować pixz
archiwa. Jednak opcje wiersza poleceń są włączone xz
i pixz
różnią się.
pixz
.
XZ Utils obsługuje kompresję wielowątkową, ponieważ wersja 5.2.0 została pierwotnie błędnie udokumentowana jako dekompresja wielowątkowa.
Na przykład: tar -cf - source | xz --threads=0 > destination.tar.xz
export XZ_DEFAULTS="-T 0"
a następnie po prostu użyć zwykłego wywołania tar, tj tar cJf target.tar.xz source
.
lzop może być również opłacalną opcją, chociaż jest jednowątkowy.
Wykorzystuje bardzo szybki algorytm kompresji lempel-ziv-oberhumer , który jest 5-6 razy szybszy niż gzip w mojej obserwacji.
Uwaga: Chociaż nie jest jeszcze wielowątkowy, prawdopodobnie przewyższy Pigz w systemach 1-4 rdzeniowych. Dlatego postanowiłem to opublikować, nawet jeśli nie odpowiada to bezpośrednio na twoje pytanie. Spróbuj, może rozwiązać problem wąskiego gardła procesora, gdy używasz tylko jednego procesora i kompresujesz gorzej. Często uważałem, że jest to lepsze rozwiązanie niż np. Pigz.
Kompresor LZMA2 w p7zip wykorzystuje oba rdzenie w moim systemie.
To nie jest tak naprawdę odpowiedź, ale myślę, że jest wystarczająco istotne, aby podzielić się moimi testami porównawczymi, porównując prędkość gzip
i pigz
na prawdziwym HW w prawdziwym scenariuszu. Podobnie pigz
jak ewolucja wielowątkowa, którą osobiście zdecydowałem się teraz zastosować.
Metadane:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + dysk SSD NvmeXubuntu 17.10 (artful)
gzip
wersja: 1.6
pigz
wersja: 2.4
gzip
szybki
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
Najlepsza
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
szybki
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
najlepszy (nie zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
pigz
+ zopfli
algorytm
time pigz -11kMN ./db_dump.sql
real 171m33,501s
user 1321m36,144s
sys 0m29,780s
Podsumowując, nie polecałbym zopfli
algorytmu, ponieważ kompresja zajęła olbrzymią ilość czasu dla niezbyt znaczącej ilości zaoszczędzonego miejsca na dysku.
Wynikowe rozmiary plików:
Zstandard obsługuje wielowątkowość od wersji 1.2.0 ¹. Jest to bardzo szybki kompresor i dekompresor przeznaczony do zastąpienia gzip, a także może kompresować tak wydajnie - jeśli nie lepiej - jak LZMA2 / XZ na najwyższych poziomach.
Musisz skorzystać z pomysłowej lub nowszej wersji lub skompilować najnowszą wersję ze źródła, aby uzyskać te korzyści. Na szczęście nie pociąga za sobą wielu zależności.