彷徨えるフジワラ

年がら年中さまよってます

VirtualBox ゲスト on ZFS RAID-0

RAID-0 は本当に早いのか?ということで、まずは理論値ベースでボトルネックの有無を検証してみる。実のところ検証したのは3年前の話なので、正確には「検証してみた」だけど。

SATA は初期規格(1.0)でも 1.5Gbp なので、有効データ転送量は 150MB/s 程度(クロック制御用のビット分があるので概ね 10bps ⇒ 1B/s)である一方、HDDドライブの実性能は(当時の)高速ドライブと言われるものでも 50 〜 70MB/s 平均が良いとこなので、少なくとも単一ドライブでインタフェース性能がボトルネックになる可能性は少ない筈。

また、SATA は Point-To-Point な接続なので、接続 HDD 数を増やした際にバス調停等でゴタゴタする心配も無い。

SATA I/F や RAID コントローラが PCI バス(133MB/s)にぶら下がっている場合は、高速 HDD x 2 を RAID-0 構成にした段階でアップアップになってしまうけど、チップセット〜CPU/メモリ間が Gbps レベルの転送速度をサポートする HyperTransport で繋がれている AMD マシンなら、インタフェースボトルネックの心配は無かろう(私は AMD 派)。
ということで、論理検証上では、RAID-0 はディスク性能向上に十分寄与し得る筈、という結論に。

とは言っても、HDD ドライブの実性能以外の話は全て理論値ベースなので、チップセット実装がヘタレだと画餅に終わってしまうのだけれど、結局この心配は杞憂に終わった。

低価格帯マザーボード上の ULi チップを使い、当時の SATA HDD 最安値の HGST 80GB HDD x 4 による RAID-0 を組んだのだが、Sandra 2007 の Filesystem 項目に関する性能において、(当時の)高速 HDD の代名詞である WD Raptor と比較して 3 〜 3.5 倍の性能が出ることを確認できた。

で、ここまでが前置き。

上記のような経緯で RAID-0 化して使っていた HDD(80GB x 4) なのだが、特に異常が無かったので、今回の職場 PC リニューアルでもそのまま新環境に移行させて、ZFS の構成を:

  • 1TB x 2 の RAID-1 でメイン作業領域兼用のルート用プール
  • 80GB x 4 の RAID-0 で高速用途向けプール(VirtualBox 等の仮想マシン稼動等)

といった感じにしてみようかと。

環境的には CPU だけ見ても、Socket939(DDR) Athlon64 3200+(2.2GHz) から AM-3(DDR3) PhenomII X4 905e(2.5GHz) へと長足の進化を遂げているので:

  • 割り当て CPU 数が 1
  • 仮想化そのもののオーバヘッド

を考慮しても、いい感じの性能が出るのではないかという期待を胸に、早速性能計測をしてみた。

条件を揃える(既に相当「揃ってない」けど)ため、性能測定には SiSoftware SANDRA の 2007 年度版を使用し、比較対象は:

以上の4つ。

---- WD Raptor ULi RAID-0(x4) ZFS RAID-1(x2) ZFS RAID-0(x4)
ドライブ インデックス 48 166 534 544
バッファの読み込み 33 336 777 790
順次読み込み 55 231 691 714
ランダム読み込み 34 89 595 521
バッファの書き込み 49 175 245 682
順次書き込み 55 175 50 174
ランダム書き込み 45 65 68 170

えーと、なんと言ったらいいのか、もう言葉も無いね。すげーよ!> ZFS

まぁ、ゲスト OS からは HDD に見えていても、実はホスト側 ZFS のメモリキャッシュなんだから、早いのは当たり前と言えば当たり前か。

ZFSRAID-0 と RAID-1 の間で書き込み系の性能差が発生するのは、おそらく HDD への書き込み性能=キャッシュ領域の回転/利用効率で差が出るからなのではなかろうか、と推測。

ダーティデータの書き出しが不要なために先読み等で性能差が相殺され易い読み込み系と異なり、ダーティデータの書き出しが完了しないことには新たなキャッシュ領域の割り当てが滞ってしまう書き込み系は、キャッシュ流用可能なメモリ領域が有限であるならば、実際の HDD I/O 性能が反映され易いのではないかなぁ?

で、試しに CPU 性能を測ってみたら…………Core2 QUAD の倍以上の性能が出てる???仮想マシンには 1 つしか CPU を割り当ててないので、どう考えてもそんな性能出る筈無いよ!

…………あ!思い出した!

以前 OpenSolaris 勉強会の席で話題になった事なのだけれど:

仮想マシン上ではクロック精度があまり出ないので、ベンチマークを走らせると性能値の計測結果が妙に良くなる

ということらしい。なんだ、RAID-0 性能の件は糠喜びかよ…… orz

zpool iostat で I/O 性能を見ながらベンチマークを走らせていたお陰で、ZFS そのもののスループットが最大で 140 〜 150 MB/sec ぐらい出ていることは確認済みだから、完全な糠喜びという訳でもないところは救いか。