HOME / コンピュータTips / VirtualBox / AHCIは速いのか?
Date: 2010/08/07 | | Tags: VirtualBox, 仮想化, AHCI, IDE, Disk
VirtualBoxのディスクは、IDEとAHCIとSCSIに対応しています。IDEはデータこそDMAであれ、コマンドがPIOなのにたいして、AHCIやSCSIはある程度インテリジェントな実装のHDDです。
これを仮想化(仮想マシンに見せるハードの差異)で考えてみます。
IDEのような小粒な命令をソフトでPIOするものは、I/Oのハンドシェイクプログラムが仮想マシン層で動くことになります。一方、AHCIとかSCSIの場合、はある程度まとまった大粒な命令が仮想マシン層で動き、命令の解釈結果はネイティブの環境で動きます。
となるとAHCIやSCSIの方が速い感じがします。じゃあ、一体どんなものだろう?と、思って調べてみました。とりあえず、仮想マシンのWindows XP(on OpenSolaris(ZFS))で、実験してみます。
ディスクは、raw volumeをzfsのzvol(FSからローボリュームを切り出す機能)にアサインし、vmdkファイルを手で作ってVirtualBoxに認識させたものです。
これはデフォルトの状態で、仮想マシンにはIDEがPIIX4が見えてる状態です。
----------------------------------------------------------------------- CrystalDiskMark 3.0 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 32.052 MB/sSequential Write : 28.851 MB/sRandom Read 512KB : 30.247 MB/sRandom Write 512KB : 29.203 MB/s
Random Read 4KB (QD=1) : 3.620 MB/s [ 883.8 IOPS] Random Write 4KB (QD=1) : 3.485 MB/s [ 850.8 IOPS] Random Read 4KB (QD=32) : 3.722 MB/s [ 908.8 IOPS] Random Write 4KB (QD=32) : 3.547 MB/s [ 865.9 IOPS] Test : 50 MB [C: 73.2% (23.4/32.0 GB)] (x1) Date : 2010/06/29 15:05:34 OS : Windows XP Professional SP3 [5.1 Build 2600] (x86)
これを既に仮想マシンとしてインストール済のWindowsのCドライブに対して行うには、ちょっとしたTipsがいります。
結果です。
----------------------------------------------------------------------- CrystalDiskMark 3.0 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 578.894 MB/sSequential Write : 522.546 MB/sRandom Read 512KB : 408.473 MB/sRandom Write 512KB : 515.665 MB/s
Random Read 4KB (QD=1) : 13.708 MB/s [ 3346.6 IOPS] Random Write 4KB (QD=1) : 11.187 MB/s [ 2731.2 IOPS] Random Read 4KB (QD=32) : 12.667 MB/s [ 3092.5 IOPS] Random Write 4KB (QD=32) : 10.797 MB/s [ 2635.9 IOPS] Test : 50 MB [C: 73.2% (23.4/32.0 GB)] (x1) Date : 2010/06/29 15:34:21 OS : Windows XP Professional SP3 [5.1 Build 2600] (x86)
うっは〜。ZFSのARCバッファにのっちゃいました。その後、500MBまで増やしましたが、ARCバッファに乗ってしまう状態。まあこれはこれで、実環境で起きてればそれはいいわけですが。。。
いろんなことをしてとにかくARCをあふれさえてみました。あふれてもこの程度は出ます。
----------------------------------------------------------------------- CrystalDiskMark 3.0 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 83.699 MB/sSequential Write : 92.113 MB/sRandom Read 512KB : 83.496 MB/sRandom Write 512KB : 134.187 MB/s
Random Read 4KB (QD=1) : 3.340 MB/s [ 815.5 IOPS] Random Write 4KB (QD=1) : 3.879 MB/s [ 946.9 IOPS] Random Read 4KB (QD=32) : 7.257 MB/s [ 1771.6 IOPS] Random Write 4KB (QD=32) : 5.705 MB/s [ 1392.8 IOPS]
Test : 50 MB [C: 73.1% (23.4/32.0 GB)] (x1) Date : 2010/06/29 17:08:37 OS : Windows XP Professional SP3 [5.1 Build 2600] (x86)
AHCIの圧勝!ということがわかりました。IDE遅すぎ(笑)
こんどは、ホストPC上のCIFS機能(sambaのようなものだけど、ACLにかっちり対応した別の実装)を使い、ネットワークドライブをマウントしてみました。
仮想NICは、VirtualBoxの設定で行います。最初の1つめは100Mなので、気をつけましょう。
フルには速度はでないでしょうが・・・
----------------------------------------------------------------------- CrystalDiskMark 3.0 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 40.145 MB/sSequential Write : 6.841 MB/sRandom Read 512KB : 38.974 MB/sRandom Write 512KB : 5.471 MB/s
Random Read 4KB (QD=1) : 4.748 MB/s [ 1159.2 IOPS] Random Write 4KB (QD=1) : 0.680 MB/s [ 165.9 IOPS] Random Read 4KB (QD=32) : 4.469 MB/s [ 1091.1 IOPS] Random Write 4KB (QD=32) : 3.138 MB/s [ 766.2 IOPS] Test : 50 MB [H: 31.3% (65.5/209.1 GB)] (x1) Date : 2010/06/29 21:29:17 OS : Windows XP Professional SP3 [5.1 Build 2600] (x86)
やっぱり、NICになると遅いですね。最大転送が320Mbpsなので、100Mからすれば1Gに増やすメリットはでていますが・・・
NICをvirtioに変えてみます。
virtioというのは何かというと、シンプルに言うと、RHEL6で採用される仮想化機能、KVM関係で定められている、仮想化マシンとのブリッジAPIみたいなものです。
つまり、パラバーチャリゼーションドライバ(なるべくハードエミュレーションを行わず、多くの処理をホストサーバ側でネイティブで動作させるようなもの)をいれてみました
----------------------------------------------------------------------- CrystalDiskMark 3.0 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 36.679 MB/sSequential Write : 14.342 MB/sRandom Read 512KB : 35.053 MB/sRandom Write 512KB : 16.477 MB/s
Random Read 4KB (QD=1) : 3.489 MB/s [ 851.9 IOPS] Random Write 4KB (QD=1) : 0.520 MB/s [ 126.9 IOPS] Random Read 4KB (QD=32) : 6.565 MB/s [ 1602.7 IOPS] Random Write 4KB (QD=32) : 3.091 MB/s [ 754.7 IOPS] Test : 50 MB [H: 31.3% (65.6/209.7 GB)] (x1) Date : 2010/06/30 18:36:47 OS : Windows XP Professional SP3 [5.1 Build 2600] (x86)
あれ〜、書き込みが2倍になってるが、読み込みはちょっと劣化してる。
とりあえず、VIRTIOは、まだバグが多く、動きが怪しくなるんで、現時点では私はGBEの方にしています。
ちなみにVirtIOは、ネットワーク以外にもステージやビデオカードなどあるようです。VirtualBoxはネットワークだけしか対応してませんが。
VirtIOは確かに速くなるが、安定性がまだ低い。動作中にたまにNicが刺さるようになっていた等。
結論を言うと、今のところ、仮想マシンにはe1000g0がお勧めってことでしょうか。