こんにちは、小野マトペです。
自宅サーバーをVirtualBox on Mac miniに移行してサービスする事が出来れば、面積、静音性、可搬性、サービス独立性の面で有利だと思って、いろいろやってる。VirtualBoxを選んだのは、無料だしライセンス的な面倒がなさそうだから。あとベンチマークも悪くなさそうだったから。
VirtualBox VMの仮想ストレージには色々な設定があるが、それぞれパフォーマンスにどのような影響を与えるか調べてみた。
調査項目
- Dynamically allocated : VirtualBoxのディスクストレージには、実際に使われてから動的に領域が確保される "Dynamically allocated"と、作成時に全領域を実際に確保してしまう"Fixed size"の二つのモードがある。当然動的確保する前者の方がIOが遅くなるが、マニュアルには「動的確保によるペナルティはわずかなのでDynamically allocated推奨」とか書いてあったが、動的確保で作ったディスクへのscpが妙に遅かったので、両者のベンチマークを取る事にした。
- ホストのI/Oキャッシュを使う:ゲストのI/OにホストOSのI/Oキャッシュを使ってI/Oを高速化するオプション。ただしゲスト側でフラッシュした筈の書き込みが実際にディスクイメージに書き込まれないので、当然危険。あとホストのメモリを食いつぶすので、複数ゲストの実行時にパフォーマンスが低下する
調査環境
- 物理ホスト:27-inch, Mid 2010 / 2.8 GHz Intel Core i5 / 16 GB / Mac OS X Server Lion 10.7.2
- VirtualBox:Oracle VirtualBox for Mac 4.1.8
- 仮想マシン:128GB SATA HDD/ 1024MB RAM / 1CPU / Scientific Linux 6.1 64bit
調査方法
- bonnie++ -s 2048M
- 大体の傾向が測れれば満足なので試行回数1。
調査結果
Sequential Outputに関しては固定の方が動的割り当てより2倍ほど速い感じ。固定割り当ての時にはホストI/Oキャッシュがとても効果的に働いていて、ホストOSの実行速度を上回っている。まあ、非同期I/Oになっているので当然と言えば当然。
Sequential Inputも、固定サイズ+ホストI/Oキャッシュが物理マシンの20%になっている以外は比較にならない感じで、ここまで遅かったっけ…。
Random Seek回数。これも固定サイズ+ホストI/Oキャッシュのときだけ異様に速くて、他がゴミのような値。
まとめ
シーケンシャルライトなら固定VMのが2倍速い。障害時にデータ破損してもよい AND VM台数が少ないならホストI/Oキャッシュ有効化すればライトとランダムアクセスはネイティブ以上の性能が出る。ただしリードは壊滅的。「物理マシンの半分くらいは出るんじゃないの?」ってたかをくくってたので、少し驚き。