bzip3
bzip3

原始链接: https://github.com/iczelia/bzip3

BZip3 是 BZip2 的高性能继任者,专为压缩文本和代码而优化。它采用了先进的架构,结合了上下文混合熵编码器、基于快速后缀数组的 Burrows-Wheeler 变换,以及混合 LZ77/PPM 式的压缩方法。 基准测试表明,BZip3 在实现更高压缩比的同时,还能保持快速的并行解压速度,其性能经常超越其前身以及 XZ 和 Zstandard 等竞争对手。如果结合 `lrzip` 等长距离去重工具,BZip3 可以达到出色的压缩效果。 该软件可通过标准构建流程或系统软件包管理器(如 Homebrew)获取。尽管 BZip3 已在各种架构上经过广泛测试,但作者仍针对数据完整性提供了标准免责声明,指出算法的复杂性使得无法 100% 排除罕见边界情况错误的可能性。BZip3 在 LGPLv3 许可下发布,并包含来自不同贡献者的模块化组件,其中包括用于 BWT 构建的 `libsais` 库。鼓励用户查阅随附文档,以获取完整的基准测试细节和针对特定架构的性能预期。

Hacker News 上关于压缩算法 **bzip3** 的讨论展现了好奇与怀疑并存的态度。虽然一些用户指出 bzip3 在特定场景下可以超越 zstd,根据文件类型的不同提供更好的压缩比或更快的速度,但也有人警告称其性能非常不稳定,且高度依赖于数据。 评论者指出了 bzip3 目前所提供基准测试中的显著缺陷,并指出这些测试往往忽略了压缩时间、不同的内存占用以及各种参数设置。批评者观察到,与 zstd 相比,bzip3 有时会消耗过多的内存,这使得直接比较具有误导性。此外,由于一些用户注意到构建失败和更新不频繁的情况,人们对该项目的维护状况也表示了担忧。 归根结底,目前的共识是,尽管 bzip3 是一种在特定条件下能够实现出色表现的竞争性算法,但其不可预测性使其难以作为 zstd 等行业标准的通用替代方案被推荐。用户建议,为获得最佳结果,应根据具体情况测试多种算法和参数,而不是依赖笼统的说法。
相关文章

原文

Build

A better, faster and stronger spiritual successor to BZip2. Features higher compression ratios and better performance thanks to a order-0 context mixing entropy coder, a fast Burrows-Wheeler transform code making use of suffix arrays and a RLE with Lempel Ziv+Prediction pass based on LZ77-style string matching and PPM-style context modeling.

Like its ancestor, BZip3 excels at compressing text or code.

# If using a git clone (not needed for source packages), first...
$ ./bootstrap.sh

# All...
$ ./configure
$ make
$ sudo make install

Alternatively, you might be able to install bzip3 using your system's package manager:

Packaging status

On macOS, you can use Homebrew to easily install:

Perl source code benchmark

First, I have downloaded every version of Perl5 ever released and decompressed them.

% wget -r -l1 -nH --cut-dirs=2 --no-parent -A.tar.gz --no-directories https://www.cpan.org/src/5.0/
% for g in *.gz; do gunzip $g; done
% ls -la | wc -l
262

Then, I put all the resulting .tar files in a single .tar file and tried to compress it using various compressors:

xz -T16 -9 -k all.tar  10829.91s user 26.91s system 1488% cpu 14658M memory 12:09.24 total
bzip2 -9 -k all.tar  981.78s user 9.77s system 95% cpu 8M memory 17:16.64 total
bzip3 -e -b 256 -j 12 all.tar  2713.81s user 16.28s system 634% cpu 18301M memory 7:10.10 total
bzip3 -e -b 511 -j 4 all.tar  17.65s user 12.19s system 170% cpu 12178M memory 7:08.65 total
zstd -T12 -16 all.tar  4162.94s user 16.40s system 1056% cpu 687M memory 6:35.62 total

The results follow:

Method Compressed size (bytes)
LZMA (xz) 2'056'645'240
bzip2 3'441'163'911
bzip3 -b 256 1'001'957'587
bzip3 -b 511 546'456'978
Zstandard 3'076'143'660

Finally, wall clock time decompression times (WD Blue HDD):

Method Decompression time
LZMA (xz) 4min 40s
bzip2 9min 22s
bzip3 (parallel) 4min 06s
Zstandard 3min 51s

Then, I used lrzip to perform long-range deduplication on the original .tar file:

% time lrzip -n -o all_none.tar.lrz all.tar
546.17s user 160.87s system 102% cpu 10970M memory 11:28.00 total

% time lrzip --lzma -o all_lzma.tar.lrz all.tar
702.16s user 161.87s system 122% cpu 10792M memory 11:44.83 total

% time lrzip -b -o all_bzip2.tar.lrz all.tar
563.93s user 147.38s system 112% cpu 10970M memory 10:34.10 total

Finally, I compressed the resulting none.tar.lrz file using bzip3:

% time bzip3 -e -b 256 -j 2 all_none.tar.lrz
32.05s user 0.76s system 146% cpu 2751M memory 22.411 total

The results follow:

Method Compressed size (bytes)
lrzip + bzip3 60'672'608
lrzip + lzma 64'774'202
lrzip + bzip2 75'685'065

For further benchmarks against Turbo-Range-Coder and BSC, check powturbo's benchmark of bzip3, bzip2, bsc and others.

I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED.

Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. Great efforts in design, coding and testing have been made to ensure that this program works correctly.

However, the complexity of the algorithms, and, in particular, the presence of various special cases in the code which occur with very low but non-zero probability make it impossible to rule out the possibility of bugs remaining in the program.

DO NOT COMPRESS ANY DATA WITH THIS PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE.

That is not to say this program is inherently unreliable. Indeed, I very much hope the opposite is true. Bzip3/libbz3 has been carefully constructed and extensively tested.

Bzip3's performance is heavily dependent on the compiler. x64 Linux clang13 builds usually can go as high as 17MiB/s compression and 23MiB/s decompression per thread. Windows and 32-bit builds might be considerably slower.

Bzip3 has been tested on the following architectures:

  • x86
  • x86_64
  • armv6
  • armv7
  • aarch64
  • ppc64le
  • mips
  • mips64
  • sparc
  • s390x

visualisation of the benchmarks

Check etc/BENCHMARKS.md for more results.

A breakdown of components and their licenses follows:

  • (runtime) The codebase as a whole: Copyright 2022-2023, Kamila Szewczyk ([email protected]); LGPL (LICENSE)
  • (runtime) The Burrows-Wheeler transform (libsais) and LZP code: 2021-2022, Ilya Grebnov ([email protected]); Apache 2.0 (3rdparty/libsais-LICENSE)
  • (compile-time) build-aux: Copyright 2011, Daniel Richard G ([email protected]), 2019, Marc Stevens ([email protected]), 2008, Steven G. Johnson ([email protected]); GPL-3+ with AutoConf exception
  • (compile-time) build-aux/ax_check_compile_flag.m4: Copyright 2008, Guido U. Draheim ([email protected]), 2011, Maarten Bosmans ([email protected]); FSFAP
  • (compile-time) build-aux/git-version-gen: Copyright 2007-2012, Free Software Foundation, Inc; GPLv3
  • (runtime) bz3grep: Copyright 2003, Thomas Klausner; BSD-2-clause

bzip3 as a whole is licensed under LGPLv3 only. It is not dual-licensed under LGPLv3 and Apache 2.0.

  • Ilya Grebnov for his libsais library used for BWT construction in BZip3 and the LZP encoder which I had used as a reference implementation to improve myself.
  • Caleb Maclennan for configuring autotools as a packaging-friendly build system for BZip3.
  • Ilya Muravyov for his public domain BWT post-coder, a derivative of which is used in this project.
联系我们 contact @ memedata.com