PowerEdgeとSAS5/iRとSATAとRAID1とwrite caching。
ブログではお久しぶりになります。
落ち込んだりもしたけれど、私は元気です。
■
最近、DellのPowerEdgeにXenを導入してみたのだが、複数のDomainUで同時にディスクへの書き込みが発生すると、目に見えて性能が劣化する。
読み込みだけならぜんぜん気にならないので最初は気づかなかったのだけれど、複数のDomainUで同時に書き込みが発生すると、いずれかのDomainUの動作が一時停止してしまうほど遅い。
しばらくたつと何事もなかったかのように動き出すのだが。
で、確証をとるためにベンチマーク。
同時に実行すると0に近い結果が出るDomainUが出るので、必ずひとつのDomainだけで実行しています。
# dbench 5
Domain0
Throughput 748.846 MB/sec 5 procs
DomainU1 (2GB)
Throughput 131.427 MB/sec 5 procs
DomainU2 (1GB)
Throughput 96.305 MB/sec 5 procs
# hdparm -Tt /dev/xvda2
Domain0
Timing cached reads: 6768 MB in 1.99 seconds = 3396.78 MB/sec
Timing buffered disk reads: 212 MB in 3.05 seconds = 69.41 MB/sec
DomainU1
Timing cached reads: 6876 MB in 1.99 seconds = 3451.00 MB/sec
Timing buffered disk reads: 248 MB in 3.00 seconds = 82.66 MB/sec
上記の結果から、読み込みは特に問題ないが、書き込みは10〜20%程度しか出ていないことが裏付けられた。
■
対策として、あまり深いところまで踏み込んで対策をしたくはない。
そうすると、書き込み時にキャッシュをかますくらいしか思いつかない。
あまりやりたくなかったが、ファイルシステムのジャーナルをwritebackにしてみた。
DomainU1 (2GB)
Throughput 256.855 MB/sec 5 procs
Throughput 300.001 MB/sec 5 procs
DomainU2 (1GB)
Throughput 145.177 MB/sec 5 procs
Throughput 131.967 MB/sec 5 procs
これだけでかなり性能が改善された。
Domain0をwritebackにしなくても結構上がるもんだね。
安全を犠牲にしているのがちょっと気になるが…。UPSかましてるけどさ。
■
DomainU1とDomainU2の違いは、メモリの搭載量(と実行アプリ)。
前述の結果を見てもらえばわかると思うが、メモリの搭載量に比例しているように見える。
Linuxの場合、余っているメモリはバッファとキャッシュに使われるので、割り当てメモリを増加させてみた。
DomainU1 (4GB)
Throughput 430.649 MB/sec 5 procs
Throughput 510.242 MB/sec 5 procs
DomainU2 (2GB)
Throughput 372.263 MB/sec 5 procs
DomainU2 (4GB)
Throughput 497.078 MB/sec 5 procs
予想通り、DomainU1とDomainU2が対等になった。
■
かなり性能は改善されたけれど、なんだかすっきりしない。
で、もう少し調べてみる。
該当PowerEdgeに搭載されているRAIDコントローラのSAS5/iRは、SATAでRAID1にするとキャッシュが働かないという記述が散見された。
えー、そんなことを今更言われても…。
本当はすごいSAS6/iR - 駄犬日誌
http://d.hatena.ne.jp/reservoir/20081217/1229523756
つれづれ: DELLサーバ SATA+RAID1でI/Oパフォーマンスがよくない?
http://antas.jp/blog/ina/archives/2008/03/dell_sata_raid_io.html
■
さらに調べていると、ライトキャッシュの設定をすればよいという記述を発見。
どっちや。
Linux-PowerEdgeML-2007 - Linuxサーバー情報室 Wiki
http://sourceforge.jp/projects/linuxserver/wiki/Linux-PowerEdgeML-2007
lsiutilを使って調べると、確かに
Volume Settings: write caching disabled, auto configure, priority resync
となっていた。恐る恐るenableにする。
Volume Settings: write caching enabled, auto configure, priority resync
そしてベンチマーク。
Domain0
Throughput 1040.28 MB/sec 5 procs
DomainU1
Throughput 535.317 MB/sec 5 procs
DomainU2
Throughput 531.964 MB/sec 5 procs
Domain0がかなり上がった。DomainUも少々上がった。
デフォルトでdisableになっているのが気になるけれど、納得できる性能まで改善されたと思う。
■
そこで、ファイルシステムのジャーナルをorderedに戻してみた。
DomainU1
Throughput 515.946 MB/sec 5 procs
DomainU2
Throughput 514.749 MB/sec 5 procs
あまり変わらないので、安全を優先することにした。
■
最後にDomainU1とDomainU2で同時にベンチマークを行った結果が以下。
DomainU1
Throughput 491.307 MB/sec 5 procs
DomainU2
Throughput 499.246 MB/sec 5 procs
最初の状態では、片方はほぼ0に近い数字になっていたことを考えるとすばらしく改善された。