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から引きました.
転送時間比=1-(none, gzip, lzjb, lz4)/MAX(none, gzip, lzjb, lz4)
容量比=1-(none, gzip, lzjb, lz4)/コピー前のオリジナルファイルのサイズ
指標=転送時間比+容量比

つまり,最悪パフォーマンス=指標がゼロ
最高パフォーマンス=指標が2に近い


まず,非圧縮通常ファイルサイズです.jarやjavaをtarしたファイルですなので,テキストやバイナリが混ざっていて調度良いかなぁと.

非圧縮は転送は早いけどファイル容量が大きく,gzipファイルは圧縮に時間がかかるけどファイル容量は小さいです.トータルでは,lzjb→lz4の順でスコアが高いです.


圧縮済みファイルはこんな感じです.


最初はgzipで圧縮したもの,2番めはxzでカリカリに圧縮したものです.
結果は予想通り.圧縮機能が無しの方がパフォーマンスが最高になっています.


ファイルサイズを大きいのも実験してみました.ファイルサイズが大きいファイル一つと,それをsplitコマンドで10Mバイトに分けたのをやってみたのですが,ご覧の通り結果はほとんど変わりませんでした.


lz4が凄い.