更快更小的压缩工具zstd

背景

看到新闻说ArchLinux决定采用zstd作为默认压缩算法.

介绍

全称Zstandard.
由Facebook的Yann Collet开发.初始在2015年公布.
官方数字来看,压缩又快又小.而且支持多核心解压,看起来没有短板.

zstd的压缩级别从1到19(还可以解锁到22但多消耗内存),默认3.
不同的压缩级别,压缩时间差别很大,但解压起来时间都差不多.
可以使用 --adapt 来自动尝试压缩级别,或许磁盘很快的话会使用更低的级别?
官方提示,多线程下使用 --adapt 可能会卡顿.

默认使用单核心压缩,可以使用 -T 指定使用核心数,
当指定 -T0 时尝试使用所有核心.
同时还有快捷方式 zstdmt 表示 zstd -T0.

另外官方还招安了类似 pigzpzstd.
目前来看 pzstdzstdmt 要快一些,尤其是在高压缩级别下,但压缩后体积略微增加.

与tar集成

集成起来很简单,懒汉做法可以是

1
2
3
4
tarup() {
tar -I pzstd -cf $1.tar.zst $1
}
alias tardown="tar -I pzstd -xf"

将其中的 pzstd 替换成 zstdmt 也可以

windows上的问题

scoop安装的zstd不会附带 zstdmtpzstd, 暂时可以使用

1
2
3
4
tarup() {
tar -I 'zstd -T0' -cf $1.tar.zst $1
}
alias tardown="tar -I 'zstd -T0' -xf"

与pigz实测对比

以压缩grpc官方仓库为例

1
2
3
4
5
6
7
8
9
10
11
12
# pzstd压缩更快
tar -I pigz -cf grpc.tar.gz grpc 55.40s user 2.68s system 603% cpu 9.627 total
tar -I pzstd -cf grpc.tar.zst grpc 9.43s user 1.88s system 668% cpu 1.692 total

# 大小差不多
1.2G prpc.tar.gz
1.2G prpc.tar.zst
# 大小上区别不大,但在前端项目的压缩上,pzstd的大小要小很多

# pzstd解压更快
tar -I pigz -xf grpc.tar.gz 5.87s user 2.54s system 196% cpu 4.288 total
tar -I pzstd -xf grpc.tar.zst 1.73s user 2.36s system 232% cpu 1.757 total

软件本身使用

1
2
3
4
5
6
7
8
# 用某项目文件夹制作一个大的tar文件
tar -cf xxx.tar xxx

# 试用zstd
zstd xxx.tar # 会压缩出xxx.tar.zst
zstdmt xxx.tar # 多核心压缩
zstdmt -19 xxx.tar # 提高压缩级别
zstdmt --adapt -v xxx.tar # 自动压缩级别,同时输出详细信息,发现压缩级别在变动中,且会从3降低到1

评价

印象大小(小的好):

程序 大小
pigz 100%
zstd-3 85%~100%
zstd-19 50%~

印象速度(小的好)

程序 速度
pigz 100%
zstdmt-3 20%
pzstd-3 19%~20%
zstdmt-19 400%
pzstd-19% 350%~400%
  • 已经有足够理由切换到 pzstdzstdmt
  • 同时如果不是特别强调大小,默认的级别3挺好的

参考

  1. pzstd对比pigz宣传页面