Introduction
諸般の事情と紆余曲折を経て、メインPCのデータ保存用にしていたRAID(Intel Rapid Storage Technology:以下RST)を組みなおし、サーバ上に置いてたVMwareの仮想マシンをローカルにもって来ることにした。
今まで参照メインのデータしか置いていなかったので、パフォーマンスなんか気にしちゃいなかったんだけれど、VM持ってくるとなると話は別。
どんな設定が良いかググってみるも、RAID0で起動ディスク高速化とか、SSDで爆速RAID5とかそういう事例ばかりでHDDでRAID5はどうなのよ?と。
折角組み直すのであれば、自分で調べりゃいいじゃん!と言う事で、設定替えながらベンチマークとってみましたよ。
測定環境について
測定環境は以下の通り。
- M/B GIGABYTE Z77-UD3H (BIOS Ver.F18)
名前の通り、チップセットはZ77。BIOSはF20まで出て、RAID BIOSも新しくなっているらしいがベータ扱いらしいので上げていない(^^;; - CPU Core i7-2600K
O/C設定などは特にせずどノーマルで使用。 - RAM PC3-10600(DDR3-1333) 8GB×4 計32GB
VM複数起動するマシンなので、M/B上限まで増設してる。 - OS Windows7 Pro SP1 64bit
UEFIモードで起動。そろそろ10に上げたいなぁ・・・
RAIDを組むストレージは今まで使っていた物の寄せ集めで2TB×4本。
- Hitachi HDS722020ALA330
- WDC WD20EARS
- SEAGATE ST2000DM001 ×2本
更にRSTはSSDをキャッシュにして高速化できるとの事なので、新規でSSDも買って来た。なんと我が家初のSSD\(^o^)/
- ADATA SP900(64GB)
OS起動用のHDDとSSDをZ77直のSATA 6Gb/sのポートに接続、2TBのHDDをZ77直のSATA 3Gb/Sポートに接続。
因みにOSバックアップ用のHDDとDVDドライブをMarvell 88SE9172経由eSTAT 6Gb/sポートに接続。Marvell接続は起動ドライブにならないのね。OSのリストアDVD起動できねーじゃん!/(^o^)\ (USB接続DVDドライブで回避)
比較するRSTの設定
今回はRAID5で組むのを前提に、比較する設定項目を整理。
- ストライプサイズ
RAID5の場合、16 KB、32 KB、64 KB、128 KBの4パターン。デフォルトは128KB。一度RAIDを組むと後から変更はできない。大きいほどパフォーマンスが良くなるが、SSDの場合はそうでもないらしい? 今回SSDをキャッシュとして使うことも考え、各パターンで比較してみる。 - 高速化(Intel Smart Response Technology:以下ISRT)の有無
SSDをキャッシュとして使うかどうか。 - 拡張モード
ISRTを有効にした際、SSDをライトスルー(以下WT)キャッシュとして使うモード。OSからみてSSDとディスク両方に書き込むため、障害時データ損失のリスクが減るが書き込み速度は遅い方(HDD)と同じ。 - 最速モード
ISRTを有効にした際、SSDをライトバック(以下WB)キャッシュとして使うモード。一旦SSDに書き込み終了、遅いHDDには後でSSDから書き込みするため、OSからみたら書き込みが速くなる。しかしSSDが死んでたりするとデータ損失のリスクが高くなる。 - 書き込みキャッシュ バッファ(以下WCB)フラッシュの有効/無効
ISRT無しの時選択可能。ディスクに対するOSのライトキャッシュ制御。制御と言うよりは、過去の時代背景の帳尻合わせみたい。この設定により、ライトバックが使えるかどうか決まる。 - キャッシュモード:Off
ISRT無しの時選択可能。RAIDの(RSTの?)キャッシュ無し。 - キャッシュモード:ライトスルー
ISRT無しの時選択可能。キャッシュとディスク同時に書き込み(以下略 - キャッシュモード:ライトバック
ISRT無し且つWCBフラッシュ無効時のみ選択可能。まずキャッシュにのみ書き込み後でRAIDに書き込むため(以下略
ちなみに、キャッシュモードには”読み取り専用”と言うモードもあるけれど、今回は割愛。
RIAD組む前に単品でベンチ
RAID組む前に各ドライブ単体でのベンチ。ディスクベンチの定番、CrystalDiskMarを使用。但し、バージョンは5.1.2の64bit版。以下全てテストデータサイズ1GiB(Random)、5回測定の結果。
先ずは我が家初のSSD、SP900の結果から。
案の定、書き込みはたいして早くないのね。ちなみに、0Fillで測定した結果がこちら。これが0Fill詐欺と言うやつですかぁ・・・
次に2TBのHDD4本の結果。使用時間がおかしいのはスルーで(笑) SEAGATE ST2000DM001
・・・同じディスクなのにムラがでかい?
Hitachi HDS722020ALA330
7200rpmでもだいぶ違うもんですねぇ・・・
WDC WD20EARS
そんな速いディスクじゃなかったと思うけど・・・Hitachiのディスクが遅いのか?(^^;
設定の差異によるパフォーマンスの違い
だらだらと長くなってきたので、設定手順などはバッサリ端折って、サクッとCrystalDiskMakでベンチ取った結果は以下の通り。
WCBフラッシュの有効/無効による差異
ストライプサイズを変え、WCBフラッシュ有効/無効で差があるかみて見た。
んー、今気づいたけど、上半分の16K~128KがキャッシュモードOff、下半分の16K~128KがキャッシュモードWTの値です(^^;;
WCBフラッシュの設定により、有意な差は無さげ。それより、ストライプサイズの違いによる差の方が大きい。定説通り、ストライプサイズが大きい方が良い結果に。
全体的に読み込みはディスク単品の時より劇的に速くなっている。流石に4倍って訳には行かないみたいですが、この速さならSSDをキャッシュにしなくても良いんじゃないかと思えるね。
それより、書き込み時のパフォーマンス低下が酷い。仕組み上仕方が無いとはいえ、ホント目を疑うレベル。
キャッシュモードによる差異
WCBフラッシュの違いによる差が無いため、キャッシュモードの違いはWCBフラッシュ無効で比較。
読み込みに関しては、先ほどのWCBキャッシュのグラフと大差ないですが、WBでの書き込みパフォーマンスの上がり具合が目を疑うレベル。
128Kの4Kシーケンシャル書き込みが64Kの時より落ちているのが気にはなるけど(多分誤差?)、障害時のリスクを取っても良いと思える改善ぶり。
WBモードとISRTの対決
なんかもうSSDキャッシュにしなくても良いんじゃね?って感じですが、折角SSD新調してきたし、もしかしたらWBよりは安全でそこそこ速くなるかもと言う期待を込め、WBモード、ISRT拡張モード、ISRT最速モードを比べてみた。
SSDキャッシュにすると、シーケンシャルライトではWBに敵わないものの、その他の項目、特に4Kでのパフォーマンスが大分良くなるね!
ここで一つ128K最速の書き込みパフォーマンスについて補足。これストライプサイズが128Kなのが効いている訳では無く、128K最速のテストはSSD繋いで初っ端に行ったことによる効果がデカいです。128K以外のテスト時は64GB近く書き込んだ後だったので、その影響だと思われます。
ウチの場合、VM複数動かすことを考えると、ストライプサイズは128Kとして、モードはWBかISRT最速の二択だなぁ。
WBのシーケンシャルライトの速さは魅力だけど、VM稼働時の書き込みって4Kでのパフォーマンスの方が体感速度に影響しそうだけど、ゴリゴリ書き込むとなるとSSDはやっぱり書き込み寿命とか気になるし、う~む・・・
ちょっとまって、キャッシュ溢れたらどうなるの?
WBかISRT最速か、どっちを採用するか決める前にもう一点、キャッシュがあふれた場合のパフォーマンス低下はどうなるのだろうか?
読み込みはキャッシュにヒットしなければ充分に速いディスクから読み込むだけだろうが(ISRTだと読み込んだのをSSDに書き込むのかな?)、書き込み時キャッシュがあふれた場合はキャッシュモードOffの時並に遅くなってしまうのだろうか?
もしそうならば、SSDは64GB、WBのキャッシュはメインメモリの空き領域?
この疑問を解くため、サーバ上にあるVMイメージをコピーして速度がどうなるのかパフォーマンスモニタでデータを取ってみた。
尚、ストライプサイズはWB、ISRT最速共に128Kで計測。横軸がファイルコピーの経過時間、赤い線が書き込まれたデータ量、青い線が秒間の書き込み量、黒い線が秒間の書き込み量の平均。
ISRT最速の方は、書き込み量が30GBを超えた途端、書き込み速度がガクッと落ちてる。SSDの消しながら書くという動作が足を引っ張って、キャッシュモードOffの時より遅くなっている(数値として10MB/s位)。
一方WBでは50GB程書き込まれた時点で一度停滞するものの、その後50MB/s強まで書き込み速度が復活。50MB/sと言えば、キャッシュモードOffより全然速い。
この動きはとても興味深い。どんなアルゴリズムでキャッシュ制御してるんだろう?
で、どっちを採用するか
ISRT最速での、書き込みキャッシュあふれた時のパフォーマンス低下は、想定を超えドン引きレベルの低下。そんな一気に30GB以上書き込むことなんてそうそう無いとは思うけどもね。
更に、書き込みキャッシュとしてSSD使うとなると、どうしても寿命が気になる。普通に使う分には寿命気にすることは無いという話も聞くけれど、いざ寿命でSSD死んだときRSTがどんな動きするか(完全に死ぬ前or死んだ直後にアラートが上がるのかどうかetc)判んないし。
一方WBの場合、機器の寿命によるリスクは無く(ディスクが1本死んでもアラート上がってすぐ交換できるし)、電源障害・BSoDの時くらいしかリスク無いからなぁ。
うん、WBを採用するか。
データ移行したところ・・・
てなわけで、ストライプサイズ128KのWBでRAID組み直し、サーバや他の3TBのHDDにバックアップしておいたデータ2.5TB程を一晩かけてコピー。
蛇足ながら、サーバはFreeBSD、ディスクは3TB×4でZFSのRAIDZ5をsambaで共有。ベンチ結果はこんな感じ。
閑話休題。HDDはデータ量が増えるにつれ速度落ちてくるので、データコピー終わった時点でもう一回CrystalDiskMarkでベンチ取ってみた。
マジすかコレ!? 読み込みの方は遅くなるのは判るにしても、書き込みWB効いてないの?OS再起動しても値的にはこんな感じのまま・・・うわぁ、どーしよ。
ISRT最速にした方が良い?でもISRTだとデータコピーしなおすのに1日以上掛るし・・・
恐る恐るVMをいくつか起動してみる。あれ?思った程遅くない。んー???
一旦起動したVMを全てシャットダウンしてもう一回ベンチ。
読み込み・書き込み共にいー感じのパフォーマンス。念のため、また再起動してベンチ。やはり遅い。さらにVM立ち上げとベンチ取ると速くなっている・・・
謎、謎すぎる。
なんかもういろいろ組み替えるの面倒だし、しばらくこれで様子見てみるか。