[分享] bzip2, lbzip2, pbzip2 壓縮效率比較

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[分享] bzip2, lbzip2, pbzip2 壓縮效率比較

文章j1989_41 » 週五 4月 22, 2011 2:49 pm

原本都用 tar + lbzip2 來壓縮資料
不過今天又意外發現了 pbzip2
pbzip2lbzip2 一樣也是一個多執行緒的壓縮軟體
既然是一樣的東西不給他來個分出高下怎行 :-P

今天的三位主角分別是 bzip2, lbzip2 以及 pbzip2
bzip2 版本為 1.0.5-6,是在 Squeeze 底下透過 apt-get install bzip2 安裝的
lbzip2 版本為 0.23-1,也是在 Squeeze 底下透過 apt-get install lbzip2 安裝的
pbzip2 版本為 1.1.3,是透過以下步驟自行編譯安裝而成

代碼: 選擇全部
# cd /dev/shm
# apt-get install libbz2-dev
# wget http://www.compression.ca/pbzip2/pbzip2-1.1.3.tar.gz
# tar zxvf pbzip2-1.1.3.tar.gz ; cd pbzip2-1.1.3
# make && make install


接下來當然要實際測試一下壓縮效率啦
本次的測試資料是 Linux Kernel 2.6.38.4
解壓縮後大小約為 482 MB
測試過程會在 RamDisk (/dev/shm) 上進行
以減少硬碟傳輸速度對本次測試的影響
並儘可能關閉任何會使用 CPU TIME 的程序
另外硬體平台是 Intel E2140 + 2G RAM

首先是壓縮測試

1. bzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I bzip2 -cf ./DL/Kernel.UseBzip2 linux-2.6.38.4/

real    1m49.839s
user    1m49.643s
sys     0m1.076s

花了 109.839 秒

2. lbzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I lbzip2 -cf ./DL/Kernel.UseLBzip2 linux-2.6.38.4/
 
real    1m5.846s
user    2m4.360s
sys     0m3.728s

花了 65.846 秒,比 bzip2 快了約 66.8%

3. pbzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I pbzip2 -cf ./DL/Kernel.UsePBzip2 linux-2.6.38.4/
 
real    1m8.698s
user    2m5.832s
sys     0m3.704s

花了 68.698 秒,比 bzip2 快了約 59.9%

在檔案大小方面其實都差不多
用單執行緒 bzip2 壓好的會小一咪咪咪咪咪...
[jiunyu:/dev/shm/DL] $ /bin/ls -l
total 292940
-rw-r--r-- 1 jiunyu jiunyu 74752680 Apr 22 13:46 Kernel.UseBzip2
-rw-r--r-- 1 jiunyu jiunyu 75044267 Apr 22 13:49 Kernel.UseLBzip2
-rw-r--r-- 1 jiunyu jiunyu 75041369 Apr 22 14:05 Kernel.UsePBzip2
-rw-r--r-- 1 jiunyu jiunyu 74809587 Apr 22 13:14 linux-2.6.38.4.tar.bz2



然後是解壓縮測試

1. bzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I bzip2 -xf ./DL/linux-2.6.38.4.tar.bz2

real    0m30.428s
user    0m30.262s
sys     0m2.024s

花了 30.428 秒

2. lbzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I lbzip2 -xf ./DL/linux-2.6.38.4.tar.bz2

real    0m21.732s
user    0m38.090s
sys     0m2.920s

花了 21.732 秒,比 bzip2 快了約 40%

3. pbzip2
代碼: 選擇全部
[jiunyu:/dev/shm] $ time tar -I pbzip2 -xf ./DL/linux-2.6.38.4.tar.bz2

real    0m29.357s
user    0m29.334s
sys     0m1.648s

花了 29.357 秒,比 bzip2 快了約 3.6%


結論:

壓縮速度:    lbzip2>pbzip2>>bzip2
解壓縮速度:   lbzip2>>pbzip2>bzip2
壓縮後檔案大小: bzip2<pbzip2<lbzip2

原本以為 pbzip2 比較新應該會比較好 (Released on Mar 27, 2011 )
結果並沒有
而且還在解壓縮項目大輸 lbzip2
我有用 top 觀察 pbzip2 在解壓縮時的 CPU Usage
其間只有一個核心是處於滿載狀態
另一個使用率大約只有 10%
也難怪解壓縮會慘敗給 lbzip2

最後建議 CPU 是多核心單核心+HT的朋友使用 lbzip2 來進行(解)壓縮
速度真的快蠻多的
至於單核心的朋友使用 bzip2 就可以了
因為一個執行緒就可以讓你的 CPU 全速衝刺囉~ :kuso_1.02:
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客