Ubuntu中有哪些压缩工具可以受益于多核CPU。
Ubuntu中有哪些压缩工具可以受益于多核CPU。
Answers:
有两个主要工具。lbzip2
和pbzip2
。它们本质上是bzip2压缩器的不同实现。我已经比较了它们(输出是经过整理的版本,但是您应该能够运行命令)
cd /dev/shm # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400
$ lbzip2 -zk bigfile
Time: 0m3.596s
Size: 105335428
$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460
lbzip2
似乎是随机数据的赢家。它的压缩量略少,但速度更快。YMMV。
/dev/urandom
基准测试压缩工具不是很好的输入选择,因为根据定义,随机数据是不可压缩的。这部分解释了为什么在两种情况下输出文件都比输入大 450MiB 。
00000000000000000000000000000000
。那就是随机的工作原理;)您在说的是实际平均值。您不太可能生成仅为零的100MB文件。我同意您所说的精神,我只是不同意“按定义”,因为这不是定义(因为它不准确)。
wget http://mattmahoney.net/dc/enwik8.zip
,从Wikipedia中获取96MB(压缩的21MB)文本。有关更全面的基准套件,请参见此处。
好吧,关键字是parallel。在寻找所有并行的压缩工具之后,我发现了以下内容:
PXZ -Parallel XZ是一种压缩实用程序,它可以同时在多个内核和处理器上对输入文件的不同部分运行LZMA压缩。其主要目标是利用所有资源来加快压缩时间,同时对压缩率的影响最小。
sudo apt-get install pxz
PLZIP -Lzip是基于LZMA算法的无损数据压缩器,具有非常安全的完整性检查和类似于gzip或bzip2的用户界面。Lzip的解压缩速度几乎与gzip一样快,并且压缩效果优于bzip2,这使其非常适合软件分发和数据归档。
Plzip是使用lzip文件格式的lzip的大规模并行(多线程)版本。plzip生成的文件与lzip完全兼容。
Plzip旨在在多处理器计算机上更快地压缩/解压缩大文件,这使其特别适合于分发大软件文件和大规模数据归档。在足够大的文件上,plzip可以使用数百个处理器。
sudo apt-get install plzip
PIGZ - Pigz代表GZip的并行实现,是gzip的全功能替代品,在压缩数据时利用了多个处理器和多个内核。
sudo apt-get install pigz
PBZIP2 -pbzip2是bzip2块排序文件压缩器的并行实现,该压缩器使用pthreads并在SMP机器上实现了近乎线性的加速。该版本的输出与bzip2 v1.0.2完全兼容(即:任何用pbzip2压缩的内容都可以用bzip2解压缩)。
sudo apt-get install pbzip2
LRZIP-多线程压缩程序,与大文件一起使用时,可以实现很高的压缩率和速度。它使用zpaq和lzma的组合压缩算法来实现最大压缩,使用lzo来实现最大速度,并降低rzip的远程冗余。它旨在随着RAM大小的增加而扩展,从而进一步提高压缩率。大小或速度优化的选择都可以提供比lzma所能提供的更好的压缩效果,或者比gzip更好的速度,但是具有bzip2大小的压缩级别。
sudo apt-get install lrzip
一个小的压缩基准(使用创建的Oli测试):
原始文件大小-100 MB
PBZIP2-101 MB(大1%)
PXZ-101 MB(大1%)
PLZIP-102 MB(大1%)
LRZIP-101 MB(大1%)
PIGZ-101 MB(大1%) )
一个小的压缩基准(使用文本文件):
原始文件大小-70 KB文本文件
PBZIP2-16.1 KB(23%)
PXZ-15.4 KB(22%)
PLZIP-15.5 KB(22.1%)
LRZIP-15.3 KB(21.8%)
PIGZ-17.4 KB(24.8%)
lrzip
可以使用进行解压缩pbzip2
。
除了上面的不错的总结(感谢Luis),这些天来人们可能还想考虑PIXZ,根据它的自述文件(来源:https://github.com/vasi/pixz-我尚未亲自验证这些说法) )比PXZ有一些优势。
[Compared to PIXZ, PXZ has these advantages and disadvantages:]
* Simpler code
* Uses OpenMP instead of pthreads
* Uses streams instead of blocks, not indexable
* Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage
换句话说,PIXZ应该具有更高的内存和磁盘效率,并且具有可选的索引功能,该功能可加快压缩tar文件各个组件的解压缩速度。
pixz
存档与标准xz
格式不兼容,实际上是这样pxz
。
pixz
可以解压缩xz
档案,xz
也可以解压缩pixz
档案。但是,命令行选项on xz
和pixz
有所不同。
pixz
。
尽管lzop是单线程的,但它也是可行的选择。
它使用非常快的lempel-ziv-oberhumer压缩算法,在我的观察中,它比gzip快5-6倍。
注意:尽管它还不是多线程的,但在1-4核心系统上,它的性能可能会胜过Pigz。这就是为什么即使它没有直接回答您的问题,我也决定发布此消息。尝试一下,它可能会解决您的CPU瓶颈问题,而仅使用一个CPU并压缩得更糟。我发现它通常是比Pigz更好的解决方案。
这是不是一个真正的答案,但我认为这是足够的相关分享我的基准比较速度gzip
和pigz
在真实硬件在真实的生活场景。由于pigz
是我个人选择了从现在开始使用多线程的演变。
元数据:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t)+ NVMe SSDXubuntu 17.10 (artful)
gzip
版: 1.6
pigz
版: 2.4
gzip
快
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
最好
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
快
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
最佳(否zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
pigz
+ zopfli
算法
time pigz -11kMN ./db_dump.sql
real 171m33,501s
user 1321m36,144s
sys 0m29,780s
作为底线,我不建议使用该zopfli
算法,因为压缩花费了大量时间来占用不那么多的磁盘空间。
产生的文件大小: