Linux几种压缩工具或库的简单测试

December 29, 2011 / Compression, Linux, Test

Linux系统下可用的压缩工具或库很多,我找了几个我所知的做了个简单测试,为以后硬盘压力太大需要压缩数据时做个参考。共测试了lzop、quicklz、gzip、bzip2、xz、p7zip这6个工具或库,据说Google的snappy也不错,可惜没有命令行程序,就没进行测试。

1. 测试环境

OS:CentOS 5.6 x86-64

Kernel:CentOS 5.6 x86-64

CPU:16 * Intel(R) Xeon(R) CPU 2.4G

Memory:16GB +

Disk:SATA

Compiler:gcc 4.1.2

2. 安装

yum install gzip bzip2 xz

lzop:

cd /opt
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar zxvf lzo-2.06.tar.gz
cd lzo-2.06
./configure
make
make install

cd ..
wget http://www.lzop.org/download/lzop-1.03.tar.gz
tar zxvf lzop-1.03.tar.gz
cd lzop-1.03
./configure
make
make install

quicklz:

cd /opt
mkdir quicklz
cd quicklz
wget http://www.quicklz.com/quicklz.h
wget http://www.quicklz.com/quicklz.c
wget http://www.quicklz.com/compress_file.c
wget http://www.quicklz.com/decompress_file.c
gcc -c quicklz.c
gcc -o compress_file compress_file.c quicklz.c
gcc -o decompress_file decompress_file.c quicklz.c

p7zip:

从http://sourceforge.net/projects/p7zip下载p7zip_9.20.1_src_all.tar.bz2,保存到/opt。

cd /opt
tar -jxvf p7zip_9.20.1_src_all.tar.bz2
cd p7zip_9.20.1
make
./install.sh

3. 准备测试数据

找了一些文本数据,用tar打包这些数据,存放到/opt/test.tar,大小为1.1GB。

4. 测试

  lzop:

cd /opt
# compress:
time lzop -f -o test.tar.lzo test.tar
# decompress:
time lzop -d -f -o test.lzo.tar test.tar.lzo

  quicklz:

cd /opt/
# compress:
time quicklz/compress_file test.tar test.tar.qz
# decompress:
time quicklz/decompress_file test.tar.qz test.qz.tar

  gzip:

cd /opt/
# compress:
time gzip -c  test.tar > test.tar.gz
# decompress:
time gzip -cd test.tar.gz > test.gz.tar

  bzip2:

cd /opt/
# compress:
time bzip2 -kfc test.tar > test.tar.bz2
# decompress:
time bunzip2 -kfc test.tar.bz2 > test.bz2.tar

  xz:

cd /opt/
# compress:
time xz -kfc test.tar > test.tar.xz
# decompress:
time xz -dkfc test.tar.xz test.xz.tar

  p7zip:

cd /opt/
# compress:
time 7za a test.tar.7z test.tar
# decompress:
time 7za e test.tar.7z

5. 测试结果


压缩算法 压缩后数据大小 压缩速率(MB/s) 解压缩速率(MB/s)
lzop 28.7% 268.8 266.0
quicklz 22.6% 107.0 95.0
gzip 16.1% 36.4 116.6
bzip2 11.3% 3.1 25.2
xz 11.4% 0.3 58.1
p7zip 11.8% 3.6 56.3

从上表可看出每种压缩算法、工具都有其倾向性,有的倾向于高压缩比,有的倾向于高速率。可以明显地看出lzop和quicklz的压缩和解压缩速率都比较高,而压缩后的数据也相对要大很多,quicklz的官方网站号称其是最快的压缩库,但我测出来的结果却和官方的测试结果差很多,或许是我的测试方式不恰当。bzip2、xz和p7zip的压缩比很高,但压缩过程却很漫长,好在解压缩速度还可忍受,适合用于存储压力较大、不对数据做更新或更新频率较低的场景,比如在网盘上存储的文件用7z压缩就挺好的。gzip采用比较折衷的方案,压缩比和压缩速率处于平均水平,既能减少文件占用的空间,又不带来太大的时间开销,或许这也是gzip用得比较多的缘故吧。

6. 后记

文中若有错误或疏漏之处,烦请批评指正。