最快的GZIP实用程序


18

我正在寻找最快的gzip(或zip)实用程序。我有一个LVM卷,其中95%的空白不存在0,因此压缩非常容易。我正在寻找最快的解决方案,除了之外,实际上并不关心压缩0

我知道gzip -1(与相同gzip --fast),但想知道是否有更快的方法。

谢谢。

编辑: 经过一些测试,我与和进行了比较gzip -1,得出以下结果:lzop -1pigz -1

PIGZ:

time dd if=/dev/VPS/snap | pigz -1 | ssh backup-server "dd of=/home/backupvps/snap.pigz"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 2086.87 seconds, 25.7 MB/s
7093985+266013 records in
7163950+1 records out
3667942715 bytes (3.7 GB) copied, 2085.75 seconds, 1.8 MB/s

real    34m47.147s

LZOP:

time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1829.31 seconds, 29.3 MB/s
7914243+311979 records in
7937728+1 records out
4064117245 bytes (4.1 GB) copied, 1828.08 seconds, 2.2 MB/s

real    30m29.430s

GZIP:

time dd if=/dev/VPS/snap | gzip -1 | ssh backup-server "dd of=/home/backupvps/snap_gzip.img.gz

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1843.61 seconds, 29.1 MB/s
7176193+42 records in
7176214+1 records out
3674221747 bytes (3.7 GB) copied, 1842.09 seconds, 2.0 MB/s

real    30m43.846s

编辑2

这在某种程度上与我的最初问题无关,但是使用time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"(块大小更改为16M),时间减少了real 18m22.442s


1
注意:time以这种方式使用有点不公平。用于dd的吞吐量pigz低于其他两个。
Henk 2012年

@Devator:通过查看时间,可以得出结论,现在通过加密的ssh隧道推送字节是瓶颈。您是否尝试过将ssh与“ -c”(压缩)标志一起使用,并使预压缩器脱离方程式?您还可以切换到更快的加密算法。除此之外:不使用ssh隧道重新进行基准测试(例如,使用/ dev / null作为输出接收器)
akira 2012年

作为旁注,您可以使用稀疏文件吗?然后零将不占用磁盘空间。你也压缩会更快,因为零点会被文件系统驱动程序进行插值(而就不必从磁盘读取。)
立昂业

@ Li-aungYip我不这么认为,因为“文件”是LVM卷。
Devator

知道了 继续!
Li-aung Yip 2012年

Answers:



23

尽管我个人还没有使用过它,但我认为使用并行gzip可能会加快速度:

Pigz代表gzip的并行实现,是gzip的全功能替代品,它在压缩数据时利用多个处理器和多个内核。


1
我经常使用它,如果有多个内核可用,绝对建议使用Pigz。除了更改压缩级别外,这是迄今为止最快捷的压缩方法。
jgrundstad 2012年

3
该网站看起来有些奇怪。但是不要被这迷住了,pigz由gzip和zlib的开发者之一Mark Adler编写。
so_mv 2013年

看来该项目已被放弃。
AlexLordThorsen

我更喜欢将其视为“稳定”的。它不会经常更新,但是会更新。
艾伦·德·史密特

7

您可以尝试使用Parallel Gzip(Pascal将其链接)或Parallel BZIP。
从理论上讲,BZIP对于文本而言要好得多,因此您可能需要尝试pbzip


2

您的磁盘限制为30MB / s

所有压缩机都运行良好。您甚至可以使用稍微慢一些但无所不在的bzip2来减少网络传输。

$dd if=/dev/zero bs=2M count=512 | pigz -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 9.12679 s, 118 MB/s
8192+7909 records in
9488+1 records out
4857870 bytes (4.9 MB) copied, 9.13024 s, 532 kB/s
$dd if=/dev/zero bs=2M count=512 | bzip2 -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 37.4471 s, 28.7 MB/s
12+1 records in
12+1 records out
6533 bytes (6.5 kB) copied, 37.4981 s, 0.2 kB/s
$dd if=/dev/zero bs=2M count=512 | gzip -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 14.305 s, 75.1 MB/s
9147+1 records in
9147+1 records out
4683762 bytes (4.7 MB) copied, 14.3048 s, 327 kB/s

您考虑过rsync吗?它会校验和,然后仅gzip压缩差异。


1
我的磁盘不限于30 MB / s。我刚刚运行了您的测试:pigz -1: 1073741824 bytes (1.1 GB) copied, 8.6779 seconds, 124 MB/sgzip -1: 1073741824 bytes (1.1 GB) copied, 11.6724 seconds, 92.0 MB/s。我已经考虑过rsync,但是那样会检查文件是否不同,这可能无济于事,因为大多数时候很多地方都已更改。
Devator 2012年

如果您要传输零,那么相比之下,bzip2编码的效果令人印象深刻。只是在哪一侧测量速度....对于普通的DSL线路来说,pigg的4Mbit / s可能太高了...如果磁盘速度这么快,它甚至会变得更糟。
ZaB 2012年

2

回复:lzop在其标准配置下速度较慢...调整可以节省一半的时间。但是有一个更快的替代方法叫做blosc:

https://github.com/FrancescAlted/blosc

嗯...发布并获得答复所花费的时间可能至少比您节省的时间多一倍...现在,请原谅我重新编译内核以从2s启动时间中省掉另一个.1s。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.