Edited at

ログを gzip で圧縮しているなら zstd を導入しよう


はじめに

zstd コマンド(zstdless, zstdcat, unzstd なども)は gzip にも対応しています。特にデコードは拡張子を見て自動で gzip と zstd を切り替えてくれるので、 gzip 圧縮されたログと zstd 圧縮されたログが混在している環境でも透過的に扱うことができます。

なので gzip から zstd への切り替えは次のように段階的に進めることができます。


  1. zstd コマンドツール群のインストール

  2. 圧縮されたログを扱うときに zstd を使い始める

  3. 圧縮フォーマットを zstd に切り替える


性能比較

Debian 9.3 で gzip 1.6 (aptでインストールしたもの) と zstd (1.4.0) を比べてみます。

対象となるファイルは ltsv でゴチャゴチャとアプリの情報を混ぜた重めの apache のアクセスログです。 (5,367,216,897 bytes)


圧縮

圧縮方法
圧縮後サイズ (byte)
圧縮後サイズ/圧縮前サイズ (%)
時間 (sec)

gzip
705635144
13.1%
83

zstd --format=gzip -6
700917700
13.1%
75

zstd -T4
597267814
11.1%
7.2

圧縮形式がgzipのままでも、zstdコマンドを使うことで10%ほど高速化できます。

圧縮方式をzstdにして4スレッドで圧縮すれば、圧縮率を改善しながら10倍以上高速に圧縮することができます。


伸長

伸長方法
時間 (sec)

gzファイルをgunzip
25.1

gzファイルをunzstd
14.4

zstdファイルをunzstd
4.5

圧縮形式がgzipのままでも、zstdコマンドを使うことで40%ほど高速化できます。

なので圧縮形式を切り替えなくても、調査等のために何度も gunzip するのであれば zstd コマンドをインストールしておいて損はないはずです。

そして圧縮形式を zstd に切り替えた時は、 gunzip 比で5倍以上、 zunstd を使って gzip を伸長するのに比べても3倍以上の高速化ができます。