BZip3 is een geavanceerde compressietool die fungeert als de spirituele opvolger van BZip2. Het programma biedt verbeterde compressieratio's en prestaties door het gebruik van een order-0 context mixing entropy coder, een snelle Burrows-Wheeler transform en een RLE met Lempel Ziv+Prediction pass.
Belangrijkste punten:
- Benchmarks: Tests met Perl-broncode tonen aan dat BZip3 aanzienlijk kleinere bestanden produceert dan xz (LZMA), bzip2 en Zstandard, terwijl de decompressietijden concurrerend blijven.
- Long-range deduplicatie: In combinatie met
lrzip behaalt BZip3 superieure resultaten in het verkleinen van bestanden vergeleken met lzma en bzip2.
- Installatie: De tool kan worden geïnstalleerd via broncode (via
bootstrap.sh, configure en make) of via Homebrew op macOS.
- Compatibiliteit: Het is getest op diverse architecturen, waaronder x86, ARM, PPC64le en MIPS.
- Licentie: Het project is gelicentieerd onder LGPLv3.
De auteur voegt een belangrijke disclaimer toe: vanwege de complexiteit van de algoritmen kunnen bugs voorkomen, waardoor gebruikers worden gewaarschuwd om alleen gegevens te comprimeren waarvan ze acceptabel risico op dataverlies kunnen dragen.
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
| Methode | Gecomprimeerde grootte (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 |
Resultaten: Decompressietijd (WD Blue HDD)
| Methode | Decompressietijd |
| LZMA (xz) | 4min 40s |
| bzip2 | 9min 22s |
| bzip3 (parallel) | 4min 06s |
| Zstandard | 3min 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:
| Methode | Gecomprimeerde grootte (bytes) |
| lrzip + bzip3 | 60.672.608 |
| lrzip + lzma | 64.774.202 |
| lrzip + bzip2 | 75.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.
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
| Methode | Gecomprimeerde grootte (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 |
Resultaten: Decompressietijd (WD Blue HDD)
| Methode | Decompressietijd |
| LZMA (xz) | 4min 40s |
| bzip2 | 9min 22s |
| bzip3 (parallel) | 4min 06s |
| Zstandard | 3min 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:
| Methode | Gecomprimeerde grootte (bytes) |
| lrzip + bzip3 | 60.672.608 |
| lrzip + lzma | 64.774.202 |
| lrzip + bzip2 | 75.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.