KVM上のVirtIOを使うWindowsでディスクアクセス速度を測定してみた

前回に引き続きKVMの準仮想ドライバVirtIOを使って、KVM上のWindowsでディスクアクセス速度を測定しました。 比較対象としては網羅性は無いですが、KVM上でVirtIOを使わずデフォルトのドライバを使った場合と、VirtualBox上のWindowsと、ローカルのUbuntuとで速度を測定して比較しました。

環境

ホスト環境

ハードウェア

  • CPU
  • RAM
    • DDR3 1067MHz 4GB x 2
  • HDD
    • Hitachi HTS547550A9E384 500GB 5400RPM

ソフトウェア

ゲスト環境

共通

  • 割り当てCPUコア数
    • 2
  • 割り当てメモリサイズ
    • 4096MB
  • 割り当てストレージサイズ
    • 96GB
  • ゲストOS

比較対象

  • VBox-dynamic
    • VirtualBox上で、ストレージは動的割り当て
    • AHCIタイプのストレージコントローラを使用 (デフォルト仕様)
    • ホストI/Oキャッシュは使用しない (デフォルト仕様)
  • VBox-fixed
    • VirtualBox上で、ストレージは固定割り当て
    • それ以外はVBox-dynamicと同じ
  • KVM-IDE
    • KVM上で、ストレージ固定割り当て (デフォルト仕様)
    • Disk busはIDE (デフォルト仕様)
    • I/Oキャッシュはデフォルト (有効?)
  • KVM-VirtIO
    • Disk busはVirtIO
    • それ以外はKVM-IDEと同じ
  • Local
    • ホストのローカルで測定

測定結果

KVM-VirtIOの値が非常に大きくなったので、他の値を見やすくするためKVM-VirtIOがグラフの右端で見切れるようにしてます。

考察

まずKVM-IDEKVM-VirtIOも明らかにおかしい大きな値が出ています。ローカルとゲストとで測定方法が厳密には同じではないので正確な比較ではないですが、ローカルよりもKVM-IDEKVM-VirtIOの方が大きな値を取るのは普通考えられないことです。 あまり確証はないですが、考えられる理由は2点あります。

  • KVMのホストI/Oのキャッシュがデフォルトだとオンになっていて、メモリを読み書きしていた
  • KVM (のドライバ) がものすごく頭が良くて、無意味な処理を無視していた?

一方VirtualBoxでの値はローカルの値とほぼ同等で、個人的見解としては仮想化した時のディスクアクセスのオーバーヘッドは実用上無視できると思います。

今回の測定は、デスクトップやノートPCでホストOSのWindowsを使うときにハイパーバイザとしてKVMを使うかどうかの調査も兼ねてたのですが、VirtualBoxのディスクアクセスは遅いのではないかという疑念は晴れて、VirtualBoxの使用をやめる消極的な理由はなくなりました。

KVMを使ってみた感想

  • ゲストの解像度をウィンドウサイズに合わせて変更できなかった (やり方を知らないだけかも)
  • ホストではxmodmapを使ってCapsLockを左Ctrlに変更していたのに、ゲストには反映されなかった

ディスクアクセス速度よりも使いにくさが目立ったので、KVMWindowsを仮想化するのはやめておきます。

結論

  • KVMのディスクアクセス速度はなんか悪さされて正確に測れなかった
  • VirtualBoxのディスクアクセスのオーバーヘッドは実用上無視できる (個人的見解)
  • 引き続きVirtualBoxWindowsを仮想化して使う