2016年3月5日土曜日

キャッシュのヒット率を改善しました

このエントリーをはてなブックマークに追加
サーバーを交換して以来、キャッシュのヒット率が低くストレージの負荷が高くなっていましたが、メモリを192GBから256GBに増量したことと、L2ARCをチューニングしたことにより、キャッシュのヒット率が上がりストレージの負荷を大幅に減らすことができました。

メモリの増量
最初に、メモリの192GB中64GBが4GBのモジュールだったのを、8GBのモジュールに換装して256GBにしました。これによりARCのヒット率は一日平均で95.7%から96.8%に改善しましたが、L2ARCのヒット率は24.9%から21.2%に下がってしまいました。L2ARCでヒットしていたデータがARCでヒットするようになったからです。

DRAM 192GB 256GB
ARC 95.7% 96.8%
L2ARC 24.9% 21.2%
Total 96.8% 97.5%
Miss 3.2% 2.5%

それでもARCとL2ARCを合わせたヒット率は、96.8%から97.5%と改善しました。ミス率にすると3.2%から2.5%に減っているので、ストレージのI/Oは22%減ります。ストレージの負荷のピークは61%から50%へと下がりました。

L2ARCの改善
L2ARCのヒット率が低かったのは、Solaris 11のL2ARCが32KBより大きいブロックをキャッシュの対象から外しているからです。小さなブロックのほうがSSDのランダムI/Oの性能を生かせることと、大きなブロックを書くとSSDの寿命を縮めてしまうことから、このようにしているそうです。詳細はこちらの記事を参照してください。

ftp.jaist.ac.jpのI/Oのブロックサイズは、ファイルシステムのブロックサイズと同じ128KBが大半なので、これではL2ARCが効きません。この制限を変更するパラメータがないかカーネルシンボルを探したところ、l2arc_max_block_sizeというのが見つかりました。そして、このパラメータに言及している記事も見つかりました。

実際にl2arc_max_block_sizeを128kBに変更したところ、L2ARCのヒット率は21.2%から大幅に向上して72.8%となりました。この日のARCのヒット率は96.9%だったので、実に99.2%がキャッシュにヒットしていることになります。ストレージの負荷のピークはブロックサイズ変更前の51%から21%へと下がりました。

Block Size 32KB 128KB
ARC 96.8% 96.9%
L2ARC 21.2% 72.8%
Total 97.5% 99.2%
Miss 2.5% 0.8%

SSDの寿命の問題
L2ARCのヒット率は向上しましたが、大きなブロックを書くようになったため、SSDへの書き込み速度が一日平均で1.9MB/sから19.0MB/sと大幅に増えました。Solaris 10のころは2015年の年平均で14.1MB/sでした。Solaris 11では書き込み速度にむらがあって、200MB/sで書くこともあるので平均が上がっています。

SSDにはIntel SSD 750を一つ用いていますが、保障されている書き込み容量は127TBなので、このペースでは77日しか持ちません。たいていはその何倍も書けますが、仮に5倍の635TB書けても1年強しか持ちません。エンタープライズ向けの高価なSSDを用いれば寿命の心配はなくなりますが、L2ARCのように性能も信頼性も低くてもよいところに、高価なSSDを使う気にはなれません。

Sun Fire T2000のころは、SSDはPLEXTOR PX-512M5 Proを4つ使っていました。これらはサーバー移行前後に寿命を迎えましたが、それまでに300TBほど書き込めました。4つで1.2PBです。この書き込み容量で約3年間L2ARCの役目を果たしました。今回もコンシューマー向けのSSDを複数導入して、数の力で寿命の問題を解決するつもりです。

0 件のコメント:

コメントを投稿