
2026/09/07 22:35
bzip3
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Bzip3 は、高い圧縮比とより優れた性能を提供し、順序 0 コンテキストミックスエントロピーコーダー、サフィックス配列による高速な Burrows-Wheeler 変換 (libsais)、RLE、予測を伴う Lempel-Ziv、ラン長符号化を用いた BZip2 の精神的後継者として提示されています。Perl ソースコードに対するベンチマークでは、Bzip3(
-b 511 フラグを使用)は約 262 MB のアーカイブを 7 分 8 秒で 546,456,978 バイトに圧縮し、LZMA (xz) が 2'056'645'240 バイト、bzip2 が 3'441'163,911 バイトとなるのに対し優れています。WD Blue HDD(並列処理)における復旧性能は、Bzip3 で 4 分 6 秒、LZMA で 4 分 40 秒、bzip2 で 9 分 22 秒であり、Bzip3 が最も速いです。lrzip の重複排除機能と組み合わせるパイプラインでは、ファイルサイズを 60'672,608 バイトに削減でき、bzip2(75'685,065 バイト)よりも優れ、LZMA(64'774,202 バイト)とほぼ同等のパフォーマンスを示しました。性能はコンパイラ依存であり、x64 Linux 上の clang13 でビルドした場合、スレッドあたり圧縮速度が最大 17 MiB/s、復旧速度が 23 MiB/s に達しますが、Windows および 32 ビットビルドでは低速です。Bzip3 は x86、x86_64、armv6/7、aarch64、ppc64le、mips/mips64、sparc、s390x の多数のアーキテクチャをサポートしており、古い 32 ビットシステムでも動作しますが、それでは速度が遅くなります。Linux へのインストールには ./bootstrap.sh、./configure、make、sudo make install の手順を、macOS では Homebrew を通じて行うことができます。プロジェクト全体は LGPLv3 ライセンスを採用しており、libsais は Apache 2.0(Ilya Grebnov)、build-aux コンポーネントは GPL-3+ に AutoConf の例外と FSFAP が適用されています(貢献者には Daniel Richard G と Marc Stevens が含まれます)。クレジットは Ilya Grebnov(libsais)、Caleb Maclennan(autotools 設定)、Ilya Muravyov(BWT 後部コーダー)に寄ります。著者は、広範なテストを施しているにもかかわらず低確率のバグを完全に排除することは不可能であり、データ損失に対して責任を負わない旨警告しており、重要な環境では注意が必要であると述べています。全体として、ライセンス制約を遵守し、安定性のリスクを理解すれば、重複排除パイプラインに適した高パフォーマンスの圧縮代替手段としての Bzip3 が提供されています。本文
BZip3:高性能で強力なデータ圧縮ソフトウェア
BZip2 の精神的後継者であり、より高性能・高速・強力なデータを圧縮するソフトウェアです。
技術的特徴
- 0 次文脈混合エントロピー符号化器: より効率的な情報圧縮を実現。
- Burrows-Wheeler 変換 (BWT): サフィックス配列を活用し、超高速な処理を可能にします。
- ハイブリッドなアルゴリズム:
- LZ77 方式による文字列一致探索
- PPM(文脈予測モデル)様式に基づく RLE(レランニングエリミネーション)
- Lempel-Ziv+Prediction パス
- これらの組み合わせにより、高い圧縮率と優れたパフォーマンスを両立します。
- テキストやコードの圧縮において、先祖である BZip2 と同様に卓越した性能を発揮します。
インストール方法
ソースからインストール(Git クローン時)
ソースパッケージを使用する場合は不要ですが、以下の手順でビルド・インストールを行います。
# 1. コンフィギュレーション $ ./bootstrap.sh # 2. ビルド $ ./configure $ make # 3. インストール $ sudo make install
パッケージマネージャーによるインストール(MacOS)
MacOS では Homebrew を利用して簡単にインストール可能です。
# Homebrew で検索・インストール(具体的なコマンド名は状況により異なる可能性があります) $ brew install bzip3
ベンチマーク結果:Perl ソースコード圧縮
これまでリリースされたPerl5 の全バージョンをダウンロード・解凍し、各種圧縮ツールの性能を比較しました。
環境とデータ量
- データ量:262 ファイル(合計約数 GB)
- ハードディスク:WD Blue HDD
圧縮速度と結果比較
| 圧縮ツール | コマンド引数例 | 圧縮時間 (Total) | CPU/メモリ負荷 | 圧縮後のサイズ |
|---|---|---|---|---|
| LZMA (xz) | | 12:09.24 | 1488% / 14885M | 2'056'645'240 bytes |
| bzip2 | | 17:16.64 | 95% / 8M | 3'441'163'911 bytes |
bzip3 () | | 7:10.10 | 634% / 18301M | 1'001'957'587 bytes |
bzip3 () | | 7:08.65 | 170% / 12178M | 546'456'978 bytes ⚡ |
| Zstandard | | 6:35.62 | 1056% / 687M | 3'076'143'660 bytes |
【圧縮率の勝敗】 最も圧縮率が高かったのは
bzip3 -b 511 です。
- bzip3 (
) のサイズは、xz や Zstandard よりも圧倒的に小さく、bzip2 の約 1/6 の体積です。-b 511
解凍速度比較(ウォールクロック時間)
| 圧縮ツール | 解凍時間 |
|---|---|
| Zstandard | 3 分 51 秒 ⚡ |
| bzip3 (並列処理) | 4 分 6 秒 |
| LZMA (xz) | 4 分 40 秒 |
| bzip2 | 9 分 22 秒 |
ベンチマーク:lrzip との組み合わせ(重複排除+圧縮)
元の
.tar ファイルに対し、lrzip で長距離の重複排除を行い、その後で最終的な圧縮を行いました。
1. lrzip による重複排除時間
| 対象 | コマンド | 時間 (Total) |
|---|---|---|
無圧縮 () | | 11:28.00 |
| LZMA | | 11:44.83 |
| bzip2 | | 10:34.10 |
2. 最終圧縮結果(lrzip + 最終圧縮)
生成された
all_none.tar.lrz をさらに bzip3 で圧縮しました。
| 方法 | 圧縮後のサイズ |
|---|---|
| lrzip + bzip3 | 60'672'608 bytes ⚡ (最小) |
| lrzip + lzma | 64'774'202 bytes |
| lrzip + bzip2 | 75'685'065 bytes |
【結論】 重複排除処理を行った上で
bzip3 を適用すると、他のアルゴリズムに比べて極めて小さいファイルサイズが達成可能であることを確認できました。
補足: Turbo-Range-Coder および BSC に関する詳細なベンチマークについては、powturbo プロジェクトの公式ページをご参照ください。
免責事項と信頼性について
本プログラムまたはライブラリを使用することにより生じるあらゆるデータ損失について、いかなる場合でも責任を負いません。
- 前提条件: データを圧縮することは、「元に戻せる(解凍可能)」という前提に基づいています。
- バグの可能性: アルゴリズムの複雑さや極稀な特別事例のため、プログラムに残るバグを 100% 排除することは不可能です。
- 利用条件: データ損失のリスクを受け入れ、回復不能になった場合でも許容する覚悟がある場合のみ、本プログラムを使ってください。
- 信頼性の真実: 本プログラムは**「信頼性が低いもの」ではありません**。むしろ、慎重に構築され、広範にテストされている高品質なソフトウェアです。
パフォーマンスの依存要因
BZip3 の性能はコンパイラや環境に大きく影響します。
- 推奨環境: x64 Linux (clang13)
- 圧縮速度: スレッドあたり約 17 MiB/s
- 解凍速度: スレッドあたり約 23 MiB/s
- 避けるべき環境: Windows、32 ビット系のビルド(著しく低速化する可能性あり)
サポートされるアーキテクチャ
x86, x86_64, armv6, armv7, aarch64, ppc64le, mips, mips64, sparc, s390x
詳細なベンチマーク結果は etc/BENCHMARKS.md を参照してください。
ライセンス情報
bzip3 の全体ライセンスは LGPLv3 です。 LGPLv3 と Apache 2.0 のデュアルライセンスではなく、単一の LGPLv3 ライセンスです。
各コンポーネントの詳細ライセンス内訳:
| コンポーネント | リンカー依存性 | コピーライト | ライセンス |
|---|---|---|---|
| コード全体 | 実行時 | 2022-2023 Kamila Szewczyk | LGPL |
| BWT 変換 (libsais) & LZP | 実行時 | 2021-2022 Ilya Grebnov | Apache 2.0 |
| build-aux (構成スクリプト等) | コンパイル時 | 2008-2019 複数開発者 | GPL-3+ (AutoConf 例外付き) |
| ax_check_compile_flag.m4 | コンパイル時 | 2008-2011 Guido U. Draheim/Maarten Bosmans | FSFAP |
| git-version-gen | コンパイル時 | 2007-2012 Free Software Foundation | GPLv3 |
| bz3grep | 実行時 | 2003 Thomas Klausner | BSD-2-Clause |
お礼(Credits)
以下の皆様に感謝申し上げます:
- Ilya Grebnov:
ライブラリを提供し、BWT 構築および LZP エンコーダーに貢献されました。また、実装の参考となり大変助かりました。libsais - Caleb Maclennan: autotools を用いたパッカーフレンドリーなビルドシステムの構築を支援してくださいました。
- Ilya Muravyov: パブリックドメインの BWT ポストコーダーを提供し、プロジェクトで使用されている派生機能に貢献されました。