だいこんの日々2

軸足をtwitterとfacebookに移しつつも、技術的な話はここに書いていきます。

PowerEdgeとSAS5/iRとSATAとRAID1とwrite caching。

ブログではお久しぶりになります。
落ち込んだりもしたけれど、私は元気です。

最近、DellのPowerEdgeXenを導入してみたのだが、複数の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に近い数字になっていたことを考えるとすばらしく改善された。