2011年12月4日日曜日

大きすぎるl2arc_write_maxはよくない

このエントリーをはてなブックマークに追加
この記事は全面的に間違えています。この記事はZFSのL2ARCの性能を向上させる方法として以下のものを紹介しています。
  • ZFSのレコードサイズを128KBよりずっと小さなものにする
  • l2arc_write_maxをより大きくする
  • l2arc_noprefetchを0に設定する
これらすべては悪い結果しか生みません。

まず絶対にZFSのレコードサイズを特定の値に設定してはいけません。唯一の例外はZFSをDBMSに使うときだけです。ZFSは自動的にファイルごとにレコードサイズを適切に設定します。レコードサイズを設定するとこれが台なしになります。

L2ARCのSSDへの書き込みを加速するために、l2arc_write_maxに大きな値を設定するべきではありません。これは逆の結果を生みます。L2ARC はこのパラメータを書きこみサイクルを決定するために使います。新たに書き込むデータがこの値の半分以下なら、L2ARCは1秒サイクルを選択します。そうれなければ0.2秒サイクルです。l2arc_write_maxをより大きな値に設定すると、L2ARCに1秒サイクルを選択させて書き込み速度を低下させます。

もし書き込み速度を加速したいのなら、l2arc_headroomの値を増やしたほうがいいです。適切な値はZFSの負荷の掛かり方にに依存しますが、デフォルトの2は多くの場合小さすぎます。より大きな値にすると、L2ARCは新たに書き込むデータをl2arc_write_maxいっぱいまで集めて0.2秒サイクルを選択します。

l2arc_noprefetchを0にするべきではありません。0にすると、L2ARCは使われなかったプリフェッチされたデータをSSDに書きこむことが多くなります。ARCの後ろにはこういうデータが回ることが多いからです。このデータはSSDにキャッシュされたブロックを不必要に追いだしてしまうので、L2ARCの性能が下がります。

あの記事では、L2ARCの設計が昔のSSDの特徴に基づいて行われていることが指摘されています。この点だけは正しいです。L2ARCはSSDにかなり低いIOPSしか要求しませんし、たくさんデータを書くこともひかえています。だからといって、L2ARCのパラメータを最近のとんでもない性能のSSDにあわせても、ZFSの性能を向上させることはできません。L2ARCがそんな風に設計されていないからです。

0 件のコメント:

コメントを投稿