このページの内容

LZ4 - 非常に高速な圧縮

LZ4 は可逆圧縮アルゴリズムです。コアあたり 500 MB/s を超える圧縮速度を提供し、マルチコア CPU でスケールします。非常に高速なデコーダーを備えており、その速度はコアあたり数 GB/s に達します。マルチコアシステムでは、通常、RAM の速度上限に達します。

圧縮比と引き換えに速度を高める「acceleration」係数を選ぶことで、速度を動的に調整できます。一方、CPU 時間を使って圧縮比を改善する高圧縮の派生版 LZ4_HC も提供されています。いずれのバージョンも展開速度は同じです。

LZ4 は、API と CLI の両方で辞書圧縮にも対応しています。任意の入力ファイルを辞書として取り込めますが、使われるのは最後の 64KB だけです。この機能を Zstandard Dictionary Builder と組み合わせることで、小さなファイルの圧縮性能を大幅に改善できます。

LZ4 ライブラリは、BSD 2-Clause ライセンスを使用するオープンソースソフトウェアとして提供されています。

ブランチ状態
devビルド状況

ベンチマーク

このベンチマークでは、@inikep による lzbench を使用し、Linux 64 ビット(Ubuntu 4.18.0-17)上で GCC v8.2.0 を使ってコンパイルしています。基準となるシステムの CPU は Core i7-9700K、動作周波数は 4.9GHz(ターボブーストあり)です。基準データである Silesia Corpus の圧縮を、シングルスレッドモードで評価しています。

圧縮プログラム圧縮比圧縮速度展開速度
memcpy1.00013700 MB/s13700 MB/s
LZ4 既定 (v1.9.0)2.101780 MB/s4970 MB/s
LZO 2.092.108670 MB/s860 MB/s
QuickLZ 1.5.02.238575 MB/s780 MB/s
Snappy 1.1.42.091565 MB/s1950 MB/s
Zstandard 1.4.0 -12.883515 MB/s1380 MB/s
LZF v3.62.073415 MB/s910 MB/s
zlib deflate 1.2.11 -12.730100 MB/s415 MB/s
LZ4 HC -9 (v1.9.0)2.72141 MB/s4900 MB/s
zlib deflate 1.2.11 -63.09936 MB/s445 MB/s

LZ4 は x32 モード(-mx32)にも対応し、最適化されています。このモードでは、さらに高い速度性能が得られます。

インストール

make
make install     # this command may require root permissions

LZ4 の Makefile は、ステージングインストール、配置先の変更、コマンドの再定義など、標準的な Makefile の慣例に対応しています。並列ビルド(-j#)にも対応しています。

vcpkg を使った LZ4 のビルド

依存関係管理ツール vcpkg を使って、LZ4 をダウンロードしてインストールできます。

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg.exe install lz4

vcpkg の LZ4 ポートは、Microsoft のチームメンバーとコミュニティの貢献者によって最新の状態に保たれています。版が古い場合は、vcpkg のリポジトリで issue または pull request を作成してください。

ドキュメント

生の LZ4 ブロック圧縮形式については、lz4_Block_format に詳しく記載されています。

任意の長さのファイルやデータストリームは、ストリーミングの要件に対応するため、複数のブロックを使って圧縮します。これらのブロックは、lz4_Frame_format で定義されているフレームにまとめられます。相互運用可能な LZ4 のバージョンは、フレーム形式にも従う必要があります。

その他のソース実装

C の参照実装に加えて、多くの貢献者が、さまざまな言語(Java、C#、Python、Perl、Ruby など)で lz4 の実装を作成しています。既知の移植実装の一覧は LZ4 ホームページ で管理されています。

パッケージ提供状況

ほとんどのディストリビューションにはパッケージマネージャーが付属しており、liblz4 ライブラリと lz4 コマンドラインインターフェースの両方を簡単にインストールできます。

パッケージ提供状況

謝辞

  • Takayuki Matsuoka(@t-mat): このプロジェクトの存続期間を通じて、卓越した最高水準の支援をいただいていることに感謝します。