gzipとbzip2の圧縮率はアクセスログでは約2倍違います。たとえば、2013年10月8日のhttpdのログファイルは1.67GBあります。これをデフォルトの圧縮レベルでgzipで圧縮すると195MBに、bzip2では104MBになります。その代りに所要時間はずっと長くなります。Xeon X5660 (2.8GHz)のサーバーで測ると、gzipが36.5秒なのに対してbzip2は7分46秒と12.8倍掛かります。
Xeon X5660なのでbzip2でも7分46秒で済んでいますが、ftp.jaist.ac.jpのUltraSPARC T1ですと2時間18分掛かります。深夜の空いている時間に実行した結果がこれです。UltraSPARC T1のシングルスレッド性能は恐ろしく低いのです。
Firefoxのダウンロードを引き受けていてアクセスの多かったころのログファイルは、今の10倍近い15GB前後ありました。これをbzip2で圧縮すると、圧縮時間が忙しい日中にまたがることもあって、24時間以上掛かっていました。そこでUltraSPARC T1の8コア32スレッドを生かせるpbzip2を導入して今に至ります。
xzについては一度検討しましたが、あまりにも遅かったので採用しませんでした。ただしxzが遅いのは、bzip2よりずっと高い圧縮率を得ようとした場合です。xzは圧縮レベルによって、所要時間と圧縮率のバランスが劇的に変わります。bzip2と比べて一概に遅いわけではありません。
以下に、先のアクセスログを圧縮レベルを変えてxzで圧縮したときの圧縮率と所要時間を示します。所要時間は先のXeon X5660のサーバーで測ったものです。
レベル | サイズ(MB) | 圧縮率 | bzip2比 | 所要時間 | bzip2比 |
0 | 142.8 | 8.52% | 138% | 03分07秒 | 40% |
1 | 111.4 | 6.65% | 107% | 03分34秒 | 46% |
2 | 100.7 | 6.01% | 97% | 04分42秒 | 60% |
3 | 94.5 | 5.64% | 91% | 06分21秒 | 82% |
4 | 104.4 | 6.23% | 101% | 11分24秒 | 147% |
5 | 93.0 | 5.55% | 90% | 19分48秒 | 255% |
6 | 84.3 | 5.03% | 81% | 38分46秒 | 499% |
7 | 81.9 | 4.89% | 79% | 39分56秒 | 514% |
8 | 79.7 | 4.76% | 77% | 41分16秒 | 531% |
9 | 77.8 | 4.65% | 75% | 42分22秒 | 545% |
bzip2より2割以上高い圧縮率が得られるレベル7以上では、所要時間は5倍以上になります。ログファイルの圧縮方式が混ざるのは何かと面倒なので、5倍の所要時間でこの程度の圧縮率の差ではxzに変更する気にはなれないです。
圧縮率はそうでもないですが、xzの伸張速度の速さはとても魅力的です。デフォルトの圧縮率のファイルを伸張するのに、bzip2が1分22秒かかるのに対してxzは25秒しか掛かりません。ログを集計するときに伸張速度が3倍近く速いのはとても有利です。
もし圧縮方法を決め直せるならxzにするかもしれません。適宜レベルを調節してbzip2の置き換えを狙ってもいいですし、5倍の所要時間を許容すれば高い圧縮率も狙えます。pxzやpxizといった並列版もあるので複数スレッドを使った高速化も可能ですしね。
0 件のコメント:
コメントを投稿