Aller au contenu principal

Zstandard


Zstandard


Zstandard (zstd) は、圧縮・展開が速いことを特徴とする可逆圧縮アルゴリズムである。またC言語で書かれた前述のアルゴリズムのリファレンス実装の名前でもある。Meta Platforms, Inc.に所属しているYann Colletによって2015年から開発されている。

この実装のバージョン1.0.0は2016年8月31日にフリーソフトウェアとして公開された。2018年10月に RFC 8478 で規格化され、2021年2月に RFC 8878 に更新された。メディアタイプは application/zstd 。英語発音はズィースタンダード(zee standard)。

特徴

Zstandardは、デフォルトの圧縮レベル3の場合、現在主流であるDeflate (ZIP, gzip) アルゴリズムとほぼ同じ圧縮率だが、より高速に圧縮と解凍が行えるように設計されている。

圧縮レベルは正の側は1~22が指定可能で、圧縮レベルを上げると圧縮率は上がり、幅広いレンジの圧縮率に対応している。Arch Linuxのパッケージ圧縮はZstandardを採用しているが、圧縮レベル20を採用していて、xzと比較してサイズの増加は0.8%に留まり、解凍は14倍高速である。圧縮レベルは-1以下も存在し、コマンドライン版では --fast=# で指定することが可能で、Zstandardの開発者による調査だと --fast=2 は QuickLZ や Snappy 相当、--fast=3 は LZO 相当、--fast=4 は LZ4 相当である。

Zstandardは大きな検索窓の辞書式圧縮アルゴリズム (LZ77) とエントロピー符号化を併用しており、エントロピー符号化ステージで有限状態エントロピー(FSE)のtANS あるいはハフマン符号化を使用している。Zstandardの実装で特徴的なのはエントロピー復号時に逆方向から読み取ることである。

デフォルトでは利用しないが、並列圧縮にも対応していて、コマンドライン版は-T#で指定する。#に並列度を入れ、0の場合はCPUのコア数となる。標準の Zstandard は並列解凍には対応していないが、ファイルをチャンクサイズで分割して圧縮・解凍する Parallel Zstandard (PZstandard) があり、こちらは並列解凍に対応している。

コマンドラインプログラム

  • zstd - メインプログラム
  • unzstd - zstd の解凍用。zstd -d と同じ。
  • zstdmt - 並列圧縮。zstd -T0 と同じ。
  • zstdcat - zstd で圧縮されたファイルに対して cat する。zstd -dcf と同じ。
  • zstdless - zstd で圧縮されたファイルに対して less する。
  • zstdgrep - zstd で圧縮されたファイルに対して grep する。
  • pzstd - Parallel Zstandard 。ファイルをチャンクサイズで分割して並列圧縮・並列解凍する。並列解凍でなくても良いならば普通の zstd で解凍できる。

API

C言語で実装され、APIが提供されている。それに対して、様々なプログラミング言語でのバインディングおよび再実装が存在する。

ライセンス

バージョン1.0.0から1.3.0までは、リファレンス実装がBSDライセンスにてGitHubで公開されていて、関連する特許の使用を認める追加ライセンス も付属していた。

2017年8月21日にリリースされたバージョン1.3.1 から、この特許条項は削除され、ライセンスは三条項BSDとGPLv2のデュアルライセンスに変更された。

利用例

Linuxカーネルには2017年11月(バージョン4.14)からZstandardが含まれており、btrfsやsquashfsファイルシステムでの圧縮方法として利用可能となっている。また、2020年10月(バージョン5.9)からカーネルイメージの圧縮方法として利用可能となった。

FreeBSDカーネルには2017年からZstandardが含まれており、コアダンプ(ユーザープログラムとカーネルパニックの両方)の圧縮オプションとして利用可能となっている。

GNU tar は2019年1月2日にリリースされた 1.31 から対応している。拡張子は .tar.zst もしくは .tzst 。bsdtar (libarchive) は2019年4月11日にリリースされた 3.3.3 から対応している。

rsync では2020年6月19日にリリースされた 3.2.0 から zlib 以外に、Zstandard と LZ4 に対応した。

Ubuntu 21.10(非デフォルトとしてはUbuntu 18.04より)、Red Hat Enterprise Linux 9、Fedora 31、2019年12月27日以降のArch Linux等、多くのLinuxディストリビューションでデフォルトのパッケージ圧縮方式としてZstandardを利用している。Ubuntuでは圧縮レベル19、Arch Linuxでは圧縮レベル20を採用したが、xzの圧縮レベル6に比べて、Zstandardの圧縮レベル19では6%、圧縮レベル20では0.8%パッケージのサイズが増加するが、展開速度は格段に高速になる。Debian からフォークしている Ubuntu が先行した形で、Debian 側の dpkg は2023年1月10日に Zstandard に対応したが、Debian 12 現在は引き続き xz をデフォルトとしている。

Google Chrome 123(2024年3月19日リリース)、Microsoft Edge 123、Mozilla Firefox 126 より、HTTP の Content-Encoding に zstd が使える。

参照

  • LZ77
  • Asymmetric Numeral Systems
  • Brotli
  • LZFSE - AppleがiOS 9とOS X 10.11以降に使用し2016年1月にオープンソース化した類似のアルゴリズム

参考文献

外部リンク

  • 公式ウェブサイト
  • zstd - GitHub
  • RFC 8878
  • Zstandard Overview - Zstandard アルゴリズムの概要(英語)
  •  Smaller and faster data compression with Zstandard Facebook Announcement(英語) - "Zstandardによるより小さく、速い圧縮"
  •  英ガーディアン紙はzlibの代わりにZStandardを使用している旨の記事

Text submitted to CC-BY-SA license. Source: Zstandard by Wikipedia (Historical)


INVESTIGATION