Spis treści
bzip2 doskonale znane wszystkim polecenie. Dzięki niemu możemy zaosczędzić wiele miejsca na dysku, pakując wybrane pliki. Bardzo dobra kompresja wymaga niestety sporo czasu, a co najgorsze polecenie potrafi korzystać tylko z jednego rdzenia. Na szczęście istnieje jego ulepszona wersja, która radzi sobie doskonale z dzisiejszymi wielordzeniowymi procesorami. Warto więc zmienić stare nawyki i zainstalować pbzip2 (Parallel BZIP2), bo dzięki niemu można zyskać sporo cennego czasu. Poniżej krótkie porównanie szybkości między bzip2 i pbzip2.
Instalacja pbzip2
Zaczynamy oczywiście od instalacji pakietu pbzip2. W systemie CentOS (Fedora, Red Hat), musimy dodać repozytorium epel:
[root@localhost tmp]# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm warning: epel-release-6-7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Preparing... ########################################### [100%] 1:epel-release ########################################### [100%] [root@localhost tmp]# yum install pbzip2
Użytkownicy Arch Linux wpisują:
[root@arch tmp]# pacman -S pbzip2
Testy
Testy wykonamy na pliku ISO (222MB), komputer wyposażony w procesor AMD Athlon(tm) II X4 640 Processor (4 rdzenie)
bzip2 szybkość kompresji oraz dekompresji
[root@localhost test]# ls -lh install51.iso -rw-r--r-- 1 root root 222M Jul 27 15:41 install51.iso [root@localhost test]# time bzip2 -k -c install51.iso > install51.iso-bzip2.bz2 real 1m11.773s user 1m10.822s sys 0m0.368s [root@localhost test]# time bunzip2 -c install51.iso-bzip2.bz2 > install51.iso-bzip2 real 0m30.497s user 0m29.125s sys 0m0.442s
pbzip2 szybkość kompresji oraz dekompresji
[root@localhost test]# time pbzip2 -k -c install51.iso > install51.iso-pbzip2.bz2 real 0m36.035s user 1m15.943s sys 0m1.284s [root@localhost test]# time pbunzip2 -c install51.iso-pbzip2.bz2 > install51.iso-pbzip2 real 0m13.581s user 0m29.163s sys 0m0.860s [root@localhost test]# top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19589 root 20 0 349m 40m 964 S 220.1 0.5 0:33.05 pbzip2
Sumy md5 rozpakowanych plików i oraz oryginału zgadzają się idealnie:
[root@localhost test]# md5sum install51.iso* | grep -v bz2 8943a5f885bc2e452962d32bfec2ebd4 install51.iso 8943a5f885bc2e452962d32bfec2ebd4 install51.iso-bzip2 8943a5f885bc2e452962d32bfec2ebd4 install51.iso-pbzip2
Jak widać powyżej pbzip2 okazał się 2 krotnie szybszy podczas operacji pakowania (36s vs 71s) oraz prawie 3x szybszy przy dekompresji (13.5s vs 30.5s). Co najważniejsze pliki utworzone przez pbzip2
i bzip2
są ze sobą w 100% kompatybilne (jest to dokładnie ten sam format), więc bez problemu rozpakujemy plik utworzony w pbzip2
używając polecenia bzip2
.
Warto jeszcze wspomnieć, że sami możemy zdecydować ilu procesorów (rdzeni) chcemy użyć podczas kompresji/dekompresji. Służy do tego opcja -p
(przykładowo pbzip2 -p4
dla 4 rdzeni).
pbzip2 razem z tar
Tworząc archiwum tar.bz2, polecenie tar
używa tylko jednego procesora (rdzenia). Możemy wspomóc się poleceniem pbzip2
w prosty sposób, używając opcji –use-compress-program=PROG. Poniżej porównanie czasu kompresji w przypadku katalogu (129MB, 8048 plików):
[root@localhost test]# time tar -cf dir.tar.bz2 --use-compress-prog=pbzip2 dir/ real 0m18.324s user 0m38.099s sys 0m0.696s [root@localhost test]# time tar -jcf dir.tar.bz2 dir/ real 0m43.440s user 0m43.156s sys 0m0.501s
pbzip2
znów ponad 2x szybszy (18.3s w porównaniu do 43.4s dla bzip2)
Porównanie wydajności pbzip2 z bzip2 – wyniki
W poniższej tabeli przedstawiamy więcej wyników dla różnych procesorów. Każdy test był przeprowadzony 3 razy (obraz ISO systemu OpenBSD 5.1, 222MB), w tabeli znajduje się uśredniona wartość.
Procesor | bzip2 | pbzip2 | bunzip2 | pbunzip2 |
---|---|---|---|---|
AMD X4 640 @3.0GHz (4 rdzenie) |
71.7s | 36s +200% |
30.6s | 13.5s +230% |
Opteron 4428HE @2.8GHz (6 rdzeni) |
48.5s | 12.7s +380% |
18.5s | 4.7s +390% |
i7-2600K @3.4GHz (4 rdzenie + HT) |
29s | 7.8s +370% |
11.8s | 3.6s +330% |
2x Xeon E5420 @2.5GHz (2x 4 rdzenie) |
54s | 8s +675% |
20.5s | 3.3s +620% |
i7-4790k @4.0GHz (4 rdzenie + HT) |
22.2s | 6.6s +335% |
11s | 3.1s +355% |
0 Komentarze.