ZFSの圧縮パフォーマンスベンチマーク
次のパターンを試しました.
- 非圧縮通常ファイルサイズ 557メガバイトの,Cloudera社hadoop-2.3.0-CDH5.0.0です
- gzip圧縮済み元ファイル通常ファイルサイズ 225メガバイトの,Cloudera社hadoop-2.3.0-CDH5.0.0のgzip圧縮ファイルです
- xz圧縮済み元ファイル通常ファイルサイズ 557メガバイトの,Cloudera社hadoop-2.3.0-CDH5.0.0を,xzで185Mバイトに圧縮したものです
- 非圧縮巨大ファイルサイズ 557メガバイトの,Cloudera社hadoop-2.3.0-CDH5.0.0を,10コcatでくっつけたものです
- 非圧縮小サイズ大量ファイル数 557メガバイトの,Cloudera社hadoop-2.3.0-CDH5.0.0を,10コcatでくっつけたものを,10Mバイトごとにsplitしたものです
前からZFSには興味があったので,順番に色々テストしたいと思っていたところです.
指標としては,転送速度とファイルサイズをそれぞれ正規化して加算し,0から2の値を取り大きいほど性能が良いというものを計算しました.
転送速度は,圧縮なし/gzip/lzjb/lz4の中で最も遅かった(時間がかかった)値で割り,それを1から引きました.ファイルサイズは,オリジナルのファイルサイズで割り,1から引きました.
転送時間比=
容量比=コピー前のオリジナルファイルのサイズ
指標=転送時間比+容量比
つまり,最悪パフォーマンス=指標がゼロ
最高パフォーマンス=指標が2に近い
まず,非圧縮通常ファイルサイズです.jarやjavaをtarしたファイルですなので,テキストやバイナリが混ざっていて調度良いかなぁと.
非圧縮は転送は早いけどファイル容量が大きく,gzipファイルは圧縮に時間がかかるけどファイル容量は小さいです.トータルでは,lzjb→lz4の順でスコアが高いです.
圧縮済みファイルはこんな感じです.
最初はgzipで圧縮したもの,2番めはxzでカリカリに圧縮したものです.
結果は予想通り.圧縮機能が無しの方がパフォーマンスが最高になっています.
ファイルサイズを大きいのも実験してみました.ファイルサイズが大きいファイル一つと,それをsplitコマンドで10Mバイトに分けたのをやってみたのですが,ご覧の通り結果はほとんど変わりませんでした.
lz4が凄い.