pigz加速压缩

背景

在mac和自己电脑之间传文件,偶然发现tar调用的gzip是单线程,比较慢.
于是找找替代方案,找到了pigz

一些知识

tar 原本的功能是打包,将一堆文件合并成一个文件.
比较受欢迎的 gzip, bzip2 等压缩程序原本只能压缩一个文件.
因此如果要将一堆文件压缩起来,
通常的做法是使用 tar 将这些文件打包成 .tar 文件
然后用各种压缩工具来压缩.
因此出现了各种格式

  • tar.gz 或者 tgz (gzip)
  • tar.bz2 (bzip2)
  • tar.xz (xz)
  • tar.Z (compress)

tar指定压缩程序

1
2
3
4
5
6
7
8
tar -cf temp.tar temp/            # 不压缩
tar -zcf temp.tar.gz temp/ # z代表gzip
tar -jcf temp.tar.bz2 temp/ # j代表bzip2
tar -Zcf temp.tar.Z temp/ # Z代表 compress

# 借用pigz压缩和解压
tar -I pigz -cf temp.tar.gz temp/ # 用-I指定自定义压缩程序
tar -I pigz -xf temp.tar.gz # 解压时同理

大多数文档将pigz视为多线程的gzip,压缩文件的后缀也使用 gz

另外的压缩方式

1
2
tar -cf - temp/ | pigz -p 4 > temp.tar.gz
pigz -p 4 -d temp.tar.gz
  • pigz可以使用p来指定使用的线程数,默认是电脑的全核心,如果无法获取核心数量,使用8
    如果对使用的核心数有特别的要求,可以使用该方式
  • pigz解压tar.gz文件只能得到tar文件,还需要用 tar -xf temp.tar 来进一步解压

性能相关

压缩时相比使用gzip,更能使用CPU性能,因此时间也会大幅降低,比如4核则变为1/4时间,
4核以上效果不明显,不过默认全核就好.
gzip本身解压就比压缩快,压缩90秒,解压可能16s左右.即使使用pigz也看不出特别大的差别.

相比gzip,bzip2有时能实现近一半的大小,但耗时也是成倍增长.
因此个人认为gzip是一个空间与时间的很好的折衷.

其他

其实bzip2也有多线程的实现,
有名的有 pbzip2, lbzip2 不过貌似 lbzip2 更快

参考

  1. tar借用pigz
  2. 打包和压缩