「VirtualBox」カテゴリーアーカイブ

VirtualBox 5.0の準仮想化クロック

VirtualBox 5.0が登場しました。

VirtualBox

プレスリリースによると次のような特徴があります。

  • WindowsとLinuxゲストの準仮想化のサポート
  • CPU使用の改善。CPUの命令が増えています。
  • USB 3.0のサポート
  • Windowsのドラッグアンドドロップのサポート
  • ディスクイメージの暗号化

Linuxゲストの準仮想化をサポートするというので、早速インストールしてみました。

前回にも書きましたが、Linuxゲストの準仮想化はXenのように準仮想化専用のカーネルを動かすのではなく、準仮想化インターフェースに機能を提供してエミュレーションの精度をあげるものです。

Linuxゲストには、KVMタイプとして準仮想化クロックとSMPスピンロックが提供されます。この準仮想化クロックを確認してみます。

今回はUbuntu 12.04ゲストで確認しました。

まずは順番にインストールしていきます。

  • VirtualBox 5.0のインストール
  • Extenstion Packのインストール
  • ゲストOSを起動してGuest AdditionsをゲストOSにインストール
  • 一度シャットダウンして、仮想マシンの設定で、システムー>アクセラレーション準仮想化インターフェースで、KVMもしくはデフォルトを選びます。デフォルトはゲストOSのタイプによって提供するインターフェースを変えてくれます。
  • ゲストOSの起動

起動したら、dmesgで起動時のメッセージを確認します。

$ dmesg |grep KVM
[ 4.515926] Booting paravirtualized kernel on KVM

このようにon KVMとでていれば成功です。

同様にkvm-clockを確認することで準仮想化クロックを使っていることが分かります。

$ dmesg |grep kvm-clock
[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00
[ 0.000000] kvm-clock: cpu 0, msr 0:1cf9781, boot clock
[ 4.516128] kvm-clock: cpu 0, msr 0:7fc12781, primary cpu clock
[ 4.730889] kvm-clock: cpu 1, msr 0:7fd12781, secondary cpu clock
[ 4.798499] Switching to clocksource kvm-clock

もし、kvm-clockなんて出てこなかったらkvm-clockがシステムに存在するか次のように調べます。

$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc acpi_pm

もし、なければカーネルにCONFIG_PARAVIRT_CLOCKが設定されていたか調べます。

$ less /boot/config-hogehoge
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_PARAVIRT_CLOCK=y

こうなっていなければ、準仮想化クロックは使えません。CONFIG_PARAVIRT_CLOCKがあって、kvm-clockがないときは、VirtualBoxがインターフェースを提供できていないです。

準仮想化クロックを使うことで時間の精度が上がります。でも、ゲストOS上でもNTPを使ったほうがよいようです。

KVMにおいて ホストとゲストの時間管理はNTPを用いるべきか?

準仮想化クロックと共に提供されるSMPスピンロックはマルチCPUでたくさんのプロセスを同時に起動したときの効率を高めてくれるものです。

ベンチマークを取らないと確認できないと思います。

ネットワークやディスクのアクセスも改善されるのかも確認が必要ですね。

以上、準仮想化クロックについて確認してみました。

VirtualBox 5.0RC2が登場

VirtualBox 5.0のリリースが間近のようです。

VirtualBox 5.0リリース間近、RC2が登場。準仮想化でWindowsやLinuxの性能向上、USB 3.0対応など

準仮想化に対応ということで少し調べてみました。

準仮想化インターフェースという設定項目ができた。

Xenのように準仮想化のカーネルを動かすかと思ったけどそうでないようです。

マニュアルを読んでみると、ゲストOSの準仮想化機能にインターフェースを提供してエミュレーションの精度を上げるもののようです。

デフォルト、Legacy、Minimal、Hyper-V、KVMと選択項目があります。

デフォルトだと、ゲストOSのタイプによって変わります。

MinimalはTSC(タイムスタンプカウンター)とAPICの周波数をゲストOSに提供する。MacOSに推奨。

KVMだと、Linuxカーネル2.6.25以上で、準仮想化クロックとSMPスピンロックを提供する。Linuxに推奨。

Hyper-VだとWindows 7以上で、準仮想化クロック、APICの周波数の通知、タイマーのチェックの緩和。WindowsとFreeBSDに推奨。

Legacyだと何もやらないのか記述がないです。

ゲストOSの時間の問題は複雑でパフォーマンスにも大きな影響があったので、その改善に役立つのではないでしょうか。