当前位置: 首页>>技术教程>>正文


Multi-Core压缩工具

, ,

问题描述

什么compression tools可用于Ubuntu,可以从multi-core CPU中受益。

最佳解决思路

有两个主要工具。 lbzip2pbzip2。它们实际上是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似乎是随机数据的赢家。它的压缩程度略低,但要快得多。因人而异。

次佳解决思路

好吧,关键字是并行的。在查找了所有并行的压缩工具之后,我发现了以下内容:

PXZ – Parallel XZ是一种压缩实用程序,它可以同时在多个内核和处理器上运行输入文件的不同部分的LZMA压缩。其主要目标是利用所有资源来加速压缩时间,同时尽可能减小对压缩比的影响。

sudo apt-get install pxz

PLZIP – Lzip是一种基于LZMA算法的无损数据压缩器,具有非常安全的完整性检查和类似于gzip或bzip2的用户界面。 Lzip的解压缩速度几乎和gzip一样快,并且比bzip2压缩得更好,这使得它非常适合软件分发和数据存档。

Plzip是使用lzip文件格式的lzip的大规模并行(multi-threaded)版本; plzip生成的文件与lzip完全兼容。

Plzip旨在更快地压缩/解压缩多处理器计算机上的大文件,这使其特别适合分发大型软件文件和大规模数据存档。在足够大的文件上,plzip可以使用数百个处理器。

sudo apt-get install plzip

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

sudo apt-get install pigz

PBZIP2 – pbzip2是bzip2 block-sorting文件压缩器的并行实现,它使用pthreads并在SMP机器上实现near-linear加速。此版本的输出与bzip2 v1.0.2完全兼容(即:使用pzzip2压缩的任何内容都可以使用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%)

第三种解决思路

另外上面的好总结(感谢Luis),这些天人们可能也想考虑PIXZ,根据它的README(来源: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文件的各个组件的解压缩。

第四种思路

更新:

XZ Utils支持自v5.2.0以来的multi-threaded压缩,它最初被错误地记录为multi-threaded解压缩。

例如:tar -cf - source | xz --threads=0 > destination.tar.xz

第五种思路

lzop也可能是一个可行的选择,尽管它是single-threaded。

它使用非常快的lempel-ziv-oberhumer压缩算法,在我的观察中比gzip快5-6倍。

注意:虽然它不是multi-threaded,但它可能会在1-4核心系统上胜过pigz。这就是为什么我决定发布这个,即使它没有直接回答你的问题。尝试一下,它可以解决您的CPU瓶颈问题,同时只使用一个CPU并压缩一点点。我发现它通常比一个更好的解决方案,例如pigz。

第六种思路

p7zip的LZMA2压缩器在我的系统上使用两个核心。

compression,multi-core,ubuntu

第七种思路

这不是一个真正的答案,但我认为在真实生活场景中,在真实硬件上比较gzippigz的速度是否足够相关。由于pigz是我个人从现在开始选择使用的多线程演进。

元数据:

  • 使用的硬件:Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c /8t)+ Nvme SSD

  • GNU /Linux发行版:Xubuntu 17.10 (artful)

  • gzip版本:1.6

  • pigz版本:2.4

  • 正在压缩的文件是9.25 GiB SQL转储

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算法,因为压缩需要花费大量时间才能使not-that-significant磁盘空间不受限制。

产生的文件大小:

  • 最佳:1309M

  • 速度:1680M

  • zopfli:1180M

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1661.html,未经允许,请勿转载。