FaceBookは6年ほど前、Zlibを速度と効率の両面で凌駕することを目指したZstandardを、オープンソースとして公開した。Zstandard 1.5では、一般的な圧縮レベルにおける圧縮速度と、高い圧縮レベルにおける圧縮率を共に改善すると同時に、解凍速度の向上も実現している。
Zstandardは22までの圧縮レベルをサポートする。新たな既定のマッチファインダ(match finder)は、レベル5から12の間で、256Kを越える入力に対して、高い圧縮速度を実現している。Facebookのベンチマークによると、その改善率は25パーセントから140パーセントに達するが、目立った圧縮率の低下は発生していないという。マシンの負荷が高く、キャッシュ競合の激しい環境下ならば、さらによい結果を得ることができる、とFacebookは主張する。
最大の効果が得られるのは、128KBを越えるファイルの場合です。16KB以下のファイルに対しては、既存のマッチファインダの方が速いので、デフォルトとしてそちらを使用します。このデフォルトポリシは、指示によって変更することも可能です — 高度なパラメータである"
ZSTD_c_useRowMatchFinder
"か、CLIオプション"--[no-]row-match-finder
"を使って、新しいマッチファインダを強制的に有効にすることができます。
対極的な圧縮レベルでは、Zsandardはデフォルトでブロック分割を使用して圧縮率を向上させているが、上に挙げたケースほど印象的なマージンではない。
得られるメリットの量はワークロードによって異なります。大きく異なるファイルから構成されるアーカイブを圧縮した場合の方が、エントロピ的にあまり差異のない単一ファイル(テキストファイル/enwikなど)よりも、より大きく改善されます。
特に、Facebookのベンチマークからは、最大指定値であるレベル22での圧縮では、最大で0.71パーセント、優れた圧縮が実現できることが分かる。
Zstandard 1.5は解凍速度も大きく改善されており、基本的な処理での向上率は最大21パーセントに達する。ただし実際には、コンパイラのバージョンや圧縮レベルに大きく依存する、とFacebookは言う。
一般的な多くのシナリオにおけるメリットは、+1から+9パーセントの範囲です。また、-4~+13パーセントの範囲で、乖離値があちらこちらに見えます。これらすべてのシナリオに対する改善率の平均値は、~+4パーセントです。
圧縮パフォーマンス以外の改善として、Zstandard 1.5では、既定としてのマルチスレッドのサポート、いくつかの新しいAPIの標準化と古いAPIの非推奨化、などが行われている。詳細は公式リリースノートで確認することができる。
Zstandardは、FacebookのエンジニアであるYann Collet、Chip Turner両氏の開発成果がベースになっている。特に、Asymmetric numeral system (ANS)に基づくColletの開発成果ワークを活用している点は注目される。
Zstandardは、Linuxカーネルに組み込まれてbtrfsおよびsquashfsという2つのファイルシステムに使用されている他、FreeBSDのコアダンプ圧縮にも用いられている。さらに、Arch LinuxとFedraでも使用されている。Zstandardを試してみたいのであれば、オープンソースのファイルアーカイバである7zipのサポートするコーデックのひとつとして含まれている。