LinuxGem
此处为老的 LinuxGem,新版 LinuxGem 请移步 www.linuxgem.org

多核版 gzip 和 bzip2

galeki posted @ 2008年2月20日 07:06 in Bash 和它的朋友们 with tags pbzip2 mzip , 7422 阅读

修改自: http://www.linux.com/feature/126412

Linux 下用得最普遍的两种压缩文件格式就是 .gz 和 .bz2 了,分别由 gzip 和 bzip2 命令创建。

说到压缩文件,除了压缩率之外,压缩和解压的速度也很关键,在创建或解压比较大的压缩文件时,如果时间过久,也挺郁闷的……

虽然多核 CPU 在这两年已经大面积普及了,但是标准的 gzip 和 bzip2 程序在压缩和解压的时候,只能用到 CPU 的其中一个核心,如果全部核心同时开动,一定可以大大加速压缩和解压的过程,于是,gzip 和 bzip2 的多核版: mgzippbzip2 就横空出世了~

mgzip 可以在压缩的时候充分利用多核,pbzip2 在压缩和解压的时候都可以充分利用多核。用 mgzip 压缩的压缩包,也可以通过标准的 gunzip 解压。pbzip2 只有在解压 pbzip2 创建的压缩文件时,才能利用多核。

mgzip 和 pbzip2 的用法和原来基本相同,只有一点小的差别,比如 mgzip 没有 --recursive 参数。

当然,为了获得多核速度上的提升,压缩文件也要记录一些额外的信息,导致文件要比标准的 gzip 和 bzip2 压缩后的文件要大一些,mgzip 和 gzip 的压缩结果就差不少,相比之下,pbzip2 和 bzip2 之间的差异要小很多,完全可以忽略:

$ bunzip2 linux-2.6.23.tar.bz2
$ gzip -c  linux-2.6.23.tar > linux-2.6.23.tar.gzip
$ mgzip -c linux-2.6.23.tar > linux-2.6.23.tar.mgzip
$ ls -lh
-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben  56M 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben  67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip

$ gunzip -c linux-2.6.23.tar.mgzip > linux-2.6.23.tar.mgzip-gunzip
$ md5sum linux-2.6.23.tar.mgzip-gunzip linux-2.6.23.tar
853c87de6fe51e57a0b10eb4dbb12113  linux-2.6.23.tar.mgzip-gunzip
853c87de6fe51e57a0b10eb4dbb12113  linux-2.6.23.tar

$ bzip2  -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.bzip2
$ pbzip2 -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.pbzip2

$ ls -lh
-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben  56M 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben  67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip
-rw-rw-r-- 1 ben ben  44M 2008-01-19 19:03 linux-2.6.23.tar.bzip2
-rw-rw-r-- 1 ben ben  44M 2008-01-19 19:01 linux-2.6.23.tar.pbzip2

$ ls -l
-rw-r----- 1 ben ben 264704000 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben  45488158 2008-01-19 19:03 linux-2.6.23.tar.bzip2
-rw-rw-r-- 1 ben ben  57928789 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben  69968799 2008-01-19 18:57 linux-2.6.23.tar.mgzip
-rw-rw-r-- 1 ben ben  45695449 2008-01-19 19:01 linux-2.6.23.tar.pbzip2

不过,pbzip2 有个缺点,就是不能从标准输入来获取数据,所以要想作出一个 .tar.pbzip2 的文件,得先创建一个 .tar 文件才行,不过相信再今后的版本中,肯定能实现这个功能。

家里的电脑连超线程都不是,没法测试了,偷懒拿来现成的测试结果图( CPU 为 四核 Q6600 2.4G,测试文件为 linux-2.6.23 内核源代码包 ) :

可以看出,在高压缩比的情况下,多核版和单核版的压缩文件结果差异会变小,并且不管压缩比是大是小,多核版都能大幅度提高压缩的时间 ( 四核情况下,快了 3 倍 )~

同样,解压缩的时间也大幅缩短:

  • 无匹配
  • 无匹配
Jarod 说:
2008年2月20日 17:10 可以用tar调用它们才有用,从来不直接调这两个命令
galeki 说:
2008年2月20日 19:30 做个符号链接不就得了~
joecen 说:
2008年3月03日 19:24 7zip已经可以使用多线程进行压缩。并且压缩率比bzip2还高。
yu 说:
2008年3月04日 01:41 7zip就是普及率不是很高
ee 说:
2008年5月13日 05:22 不过我个人使用pbzip2压缩文件后,后缀都是.bz2

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter