首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bzip2太慢了。多个核是可选择的

bzip2太慢了。多个核是可选择的
EN

Server Fault用户
提问于 2017-09-08 18:39:04
回答 4查看 22.3K关注 0票数 39

我正在运行以下命令:

代码语言:javascript
复制
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2

时间太长了。我使用top查看流程。bzip2过程约占核心的95%,postgres占5%。wa条目很低。这意味着磁盘不是瓶颈。

我能做些什么来提高性能呢?

也许让bzip2使用更多的内核。服务器有16个核心。

还是使用bzip2的替代方案?

我能做些什么来提高性能呢?

EN

回答 4

Server Fault用户

回答已采纳

发布于 2017-09-08 23:40:16

目前有许多压缩算法,而bzip2是较慢的压缩算法之一。普通的gzip往往要快得多,通常情况下压缩效果并不差。当速度是最重要的时候,lzop是我最喜欢的。压缩效果很差,但是速度太快了。

我决定找点乐子,比较几种算法,包括它们的并行实现。输入文件是我的工作站上的pg_dumpall命令的输出,这是一个1913 MB的SQL文件。硬件是一个较老的四核i5。时间是墙钟的时间只是压缩。并行实现被设置为使用所有4个核心。按压缩速度排序的表。

代码语言:javascript
复制
Algorithm     Compressed size        Compression          Decompression

lzop           398MB    20.8%      4.2s    455.6MB/s     3.1s    617.3MB/s
lz4            416MB    21.7%      4.5s    424.2MB/s     1.6s   1181.3MB/s
brotli (q0)    307MB    16.1%      7.3s    262.1MB/s     4.9s    390.5MB/s
brotli (q1)    234MB    12.2%      8.7s    220.0MB/s     4.9s    390.5MB/s
zstd           266MB    13.9%     11.9s    161.1MB/s     3.5s    539.5MB/s
pigz (x4)      232MB    12.1%     13.1s    146.1MB/s     4.2s    455.6MB/s
gzip           232MB    12.1%     39.1s     48.9MB/s     9.2s    208.0MB/s
lbzip2 (x4)    188MB     9.9%     42.0s     45.6MB/s    13.2s    144.9MB/s
pbzip2 (x4)    189MB     9.9%    117.5s     16.3MB/s    20.1s     95.2MB/s
bzip2          189MB     9.9%    273.4s      7.0MB/s    42.8s     44.7MB/s
pixz (x4)      132MB     6.9%    456.3s      4.2MB/s     7.9s    242.2MB/s
xz             132MB     6.9%   1027.8s      1.9MB/s    17.3s    110.6MB/s
brotli (q11)   141MB     7.4%   4979.2s      0.4MB/s     3.6s    531.6MB/s

如果您的服务器的16个核心足够空闲,可以全部用于压缩,pbzip2可能会给您一个非常大的速度。但是你还需要更快的速度,而且你可以容忍大约20%的大文件,gzip可能是你最好的选择。

更新:我将brotli (参见TOOGAMs答案)结果添加到表中。brotlis压缩质量设置对压缩比和速度影响很大,因此我添加了三个设置(q0q1q11)。默认情况是q11,但是它非常慢,而且比xz还要糟糕。不过,q1看起来非常好;压缩比与gzip相同,但速度是4-5倍!

更新:将lbzip2 (请参阅gmathts注释)和zstd (约翰尼的注释)添加到表中,并按压缩速度对其进行排序。lbzip2通过压缩速度是pbzip2的三倍使bzip2家族恢复正常,压缩比很高!zstd看起来也很合理,但在比率和速度上都被brotli (q1)打败了。

我最初的结论是,朴素的gzip是最好的选择,现在看起来几乎是愚蠢的。虽然对于普遍存在,它仍然是不可战胜的;)

票数 65
EN

Server Fault用户

发布于 2017-09-08 19:22:15

使用pbzip2。

手册说:

pbzip2是bzip2块排序文件压缩器的并行实现,它使用线程并在SMP机器上实现近乎线性的加速比。此版本的输出与bzip2 v1.0.2或更高版本完全兼容(即:使用pbzip2压缩的任何内容都可以用bzip2解压缩)。

它自动检测您拥有的处理器数量,并相应地创建线程。

票数 43
EN

Server Fault用户

发布于 2017-09-10 15:37:28

使用zstd。如果它对Facebook来说足够好的话,那么它可能对你也足够好。

更严肃的是,这其实很不错。我现在将它用于所有的东西,因为它只是起作用,它允许你用速度来换取大规模的比率(大多数情况下,速度比大小更重要,因为存储成本很低,但是速度是一个瓶颈)。

在实现与bzip2类似的整体压缩的压缩级别上,它要快得多,而且如果您愿意在CPU时间内支付一些额外的费用,您几乎可以获得类似于LZMA的结果(尽管那样它将比bzip2慢)。在最糟糕的压缩比下,它比bzip2或其他主流的替代方案要快得多。

现在,您正在压缩一个SQL转储,这几乎是令人尴尬的琐碎压缩。即使是最穷的压缩机也能很好地利用这种数据。

因此,您可以以较低的压缩级别运行zstd,它将运行数十倍的速度,并且仍然可以实现对数据的95%-99%的相同压缩。

作为一种奖励,如果您经常这样做,并希望投资一些额外的时间,您可以“培训”的zstd压缩机提前,这提高了压缩比和速度。请注意,要使培训正常工作,您需要为其提供单独的记录,而不是全部内容。按照这个工具的工作方式,它期望有许多小样本和一些类似的样本用于培训,而不是一个巨大的blob。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/872749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档