BZip3

Net als zijn voorganger is BZip3 uitmuntend in het comprimeren van tekst of code.

Installatie

Indien u een git clone gebruikt (niet nodig voor bronpakketten), voer dan eerst het volgende uit:

$ ./bootstrap.sh

Vervolgens de volledige installatie:

$ ./configure
$ make
$ sudo make install

Als alternatief kunt u bzip3 mogelijk installeren via de pakketbeheerder van uw systeem. Op macOS kunt u Homebrew gebruiken:

$ brew install bzip3

Benchmark: Perl-broncode

Voor deze benchmark is elke ooit uitgebrachte versie van Perl5 gedownload en gedecomprimeerd:

% 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

Alle resulterende .tar-bestanden zijn vervolgens in één enkel .tar-bestand geplaatst en gecomprimeerd met verschillende compressoren:

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

Resultaten: Gecomprimeerde grootte

MethodeGecomprimeerde grootte (bytes)
LZMA (xz)2.056.645.240
bzip23.441.163.911
bzip3 -b 2561.001.957.587
bzip3 -b 511546.456.978
Zstandard3.076.143.660

Resultaten: Decompressietijd (WD Blue HDD)

MethodeDecompressietijd
LZMA (xz)4min 40s
bzip29min 22s
bzip3 (parallel)4min 06s
Zstandard3min 51s

Long-range deduplicatie

Vervolgens is lrzip gebruikt om long-range deduplication uit te voeren op het originele .tar-bestand:

% 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

Ten slotte is het resulterende none.tar.lrz-bestand gecomprimeerd met 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

Resultaten na lrzip:

MethodeGecomprimeerde grootte (bytes)
lrzip + bzip360.672.608
lrzip + lzma64.774.202
lrzip + bzip275.685.065

Voor verdere benchmarks tegen Turbo-Range-Coder en BSC, zie de benchmarks van powturbo voor bzip3, bzip2, bsc en anderen.

Disclaimers

IK AANVAARD GEEN VERANTWOORDELIJKHEID VOOR ELK VERLIES VAN GEGEVENS DIE VOORTVLOEIT UIT HET GEBRUIK VAN DIT PROGRAMMA/DEZE BIBLIOTHEEK, HOE DAN OOK VEROORZAAKT.

Elke compressie van een bestand impliceert de aanname dat het gecomprimeerde bestand kan worden gedecomprimeerd om het origineel te reproduceren. Er zijn grote inspanningen geleverd in ontwerp, codering en testen om ervoor te zorgen dat dit programma correct werkt.

Echter, de complexiteit van de algoritmen, en in het bijzonder de aanwezigheid van diverse speciale gevallen in de code die voorkomen met een zeer lage maar niet-nul kans, maken het onmogelijk om de mogelijkheid uit te sluiten dat er bugs in het programma achterblijven.

COMPRIMEER GEEN GEGEVENS MET DIT PROGRAMMA TENZIJ U BEREID BENT DE MOGELIJKHEID TE ACCEPTEREN, HOE KLEIN OOK, DAT DE GEGEVENS NIET HERSTELBAAR ZULLEN ZIJN.

Dit betekent niet dat dit programma inherent onbetrouwbaar is. Integendeel, ik hoop zeer dat het tegenovergestelde waar is. Bzip3/libbz3 is zorgvuldig geconstrueerd en uitgebreid getest.

Prestaties en compatibiliteit

De prestaties van Bzip3 zijn sterk afhankelijk van de compiler. x64 Linux clang13-builds kunnen gewoonlijk oplopen tot 17MiB/s compressie en 23MiB/s decompressie per thread. Windows- en 32-bit builds kunnen aanzienlijk trager zijn.

Bzip3 is getest op de volgende architecturen:

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

Voor meer resultaten, zie etc/BENCHMARKS.md.

Licenties

Hieronder volgt een overzicht van de componenten en hun licenties:

  • (runtime) De codebase als geheel: Copyright 2022-2023, Kamila Szewczyk (k@iczelia.net); LGPL (LICENSE)
  • (runtime) De Burrows-Wheeler transform (libsais) en LZP-code: 2021-2022, Ilya Grebnov (ilya.grebnov@gmail.com); Apache 2.0 (3rdparty/libsais-LICENSE)
  • (compile-time) build-aux: Copyright 2011, Daniel Richard G (skunk@iSKUNK.ORG), 2019, Marc Stevens (marc.stevens@cwi.nl), 2008, Steven G. Johnson (stevenj@alum.mit.edu); GPL-3+ met AutoConf exception
  • (compile-time) build-aux/axcheckcompile_flag.m4: Copyright 2008, Guido U. Draheim (guidod@gmx.de), 2011, Maarten Bosmans (mkbosmans@gmail.com); 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 als geheel is uitsluitend gelicentieerd onder LGPLv3. Het is niet dubbel gelicentieerd onder LGPLv3 en Apache 2.0.

Dankwoord

  • Ilya Grebnov voor zijn libsais-bibliotheek die wordt gebruikt voor de BWT-constructie in BZip3 en de LZP-encoder die ik als referentie-implementatie heb gebruikt om mezelf te verbeteren.
  • Caleb Maclennan voor het configureren van autotools als een pakketvriendelijk bouwsysteem voor BZip3.
  • Ilya Muravyov voor zijn publieke domein BWT post-coder, waarvan een afgeleide in dit project wordt gebruikt.