DigiLoog

PC関係の事なら何でもいけるそんな処

Linuxの各圧縮コマンド実行速度と圧縮率を測定してみた [gzip/bzip2/xz/zip/7zip/lzh]

2014年06月08日(日) - 18:21 | カテゴリ: Linux

2022年版として再計測してみました。

………

先日、自鯖のログ圧縮を行おうとキーボードを叩いていたのだが、
その時に『普通ならgzipだろうけどxzとか他はどうなんだろう…?』
と思ったので、実際にファイルを圧縮しつつ実行速度と圧縮率を測定してみた。

Linux(CentOS)のデフォルトlogrotateでcompressオプションを指定した場合はgzip圧縮になる。
オプションとかコマンドを再指定する事で、他の圧縮方法に切り替える事も可能だけど、
普通はそんな面倒な事やらないし、
『ログの圧縮と言ったらgzipだべ』という人が大半だと思われる。

そんな中での今回の検証だが、果たしてどの圧縮方法が鯖に優しいのだろうか(`・ω・´)

………

● 計測方法

  1. 検証は仮想環境上に”CentOS x86_64″を構築し実施。
  2. テキスト(ログ)504MBバイナリ(CentOSのLiveCD)649MBに対して
    各圧縮コマンド毎に3回ずつ圧縮処理を行い、
    その中の最速処理時間の値を圧縮方法に対応する処理時間とする
  3. 圧縮率指定の出来るコマンドでは、[速度重視 / 指定無し / 最高圧縮率]の3種類の測定を行う
    ただし、アーカイブ化オプション(=圧縮しない)の場合は省略する
  4. 処理時間の測定にはtimeコマンドを使用し、
    ユーザタイムでの処理時間をファイルの圧縮にかかった時間とする
  5. 圧縮率の計算は“[圧縮後の容量] / [圧縮前の容量]”とする
  6. 各コマンドのバージョンは以下の物を使用
コマンド バージョン
gzip 1.3.12
bzip2 1.0.5
xz 4.999.9beta
zip 3.0
7zip(7za) 9.20.1
lzh(lha) 1.14i

という事で、実際にコマンドを叩きまくって計測をしてみた。

◆ テキスト(ログ)ファイル [元ファイルサイズ:528394240(504M)Byte]

● 処理速度(単位:)

  最速処理速度 速度指定無し 最高圧縮率
gzip 5.06 11.15 16.98
bzip2 96.78 171.10 170.94
xz 19.02 303.38 422.88
zip 5.01 11.27 17.35
7zip 20.37 207.11 454.99
lzh NoData 17.95 NoData

● 圧縮率(圧縮後容量:Byte | 圧縮率:%)

  最速処理速度 速度指定無し 最高圧縮率
圧縮後容量 圧縮率 圧縮後容量 圧縮率 圧縮後容量 圧縮率
gzip 69740928(66.51M) 13.199 56342711(53.73M) 10.663 53053857(50.60M) 10.041
bzip2 47765217(45.55M) 9.040 39473917(37.65M) 7.471 39473917(37.65M) 7.471
xz 52814696(50.37M) 9.995 39297448(37.48M) 7.437 34627800(33.02M) 6.553
zip 69741068(66.51M) 13.199 56342850(53.73M) 10.663 53053996(50.60M) 10.040
7zip 49351228(47.06M) 9.340 45921512(43.79M) 8.691 34625193(33.02M) 6.553
lzh NoData 56100468(53.50M) 11.185 NoData

………

◆ バイナリ(LiveCD)ファイル [元ファイルサイズ:680525824(649M)Byte]

● 処理速度(単位:)

  最速処理速度 速度指定無し 最高圧縮率
gzip 27.26 29.38 29.57
bzip2 160.31 203.46 199.18
xz 118.53 289.40 378.48
zip 24.43 26.00 25.84
7zip 137.07 313.51 571.32
lzh NoData 56.43 NoData

● 圧縮率(圧縮後容量:Byte | 圧縮率:%)

  最速処理速度 速度指定無し 最高圧縮率
圧縮後容量 圧縮率 圧縮後容量 圧縮率 圧縮後容量 圧縮率
gzip 663346521(632.62M) 97.476 662932387(632.22M) 97.415 662931421(632.22M) 97.416
bzip2 671338147(640.24M) 98.650 668833540(637.85M) 98.282 668833540(637.85M) 98.282
xz 662375208(631.69M) 97.333 657594464(627.13M) 96.630 657235092(626.79M) 96.577
zip 663346660(632.62M) 97.476 662932526(623.22M) 97.415 662931560(632.22M) 97.415
7zip 666778042(635.89M) 97.980 661232857(630.60M) 97.165 661003682(630.38M) 97.131
lzh NoData 663947004(633.19M) 97.564 NoData

計測の生データはこちら

テキストファイルでは圧縮速度最重視だとgzip、圧縮率最重視だとxzという結果になった。
しかし、圧縮後容量を見るとgzipとxzだと結構差のある結果に。
ログとかだと年単位で取得とかになるので、たかが数メガでも1年分(x365)するととんでもない事に。
そういう実用面を考えると、bzip2で最高ブロック数指定がバランスを取れているのかもしれない。

意外だったのが、テキストで最高圧縮率指定だと7zipが一番縮んだ事。
実行前は『xzが一番縮むだろうな~』と予想していただけに驚きだった。
その分、処理時間も一番長かったので実用面では工夫しないといけないだろうが(´・ω・`)

バイナリファイルの圧縮率ではxzの一人勝ちだった。
しかし、処理速度観点で見るとgzipとzipの一騎打ちに。
昔から使われているgzipとzipだけあって、様々なシーンでの高速処理が目に見えた結果だった。

圧縮処理については賛否両論あるし、それぞれのシーンによって使い分けるのが一番良いのだろうが、
実用シーンではbzip2がオールマイティに使えると感じた結果になりましたとさ(`・ω・´)
…と言いつつ、自鯖のlogrotateは未だにgzipなわけですが





  • 応援中

    はじめるセカイの理想論 -goodbye world index-