VMware製品上でBitVisorは動くのでしょうか。実はBitVisor 1.4の変更点に以下のものがあります:
- vt: EFER のセーブ/ロード機能があれば使うようにした。これによって、VMware 製品の仮想マシン上で VMM が動作するようになった。
というわけで、動作するようになっています。最新版でも動作するのか気になるところですが、試してくださった方がいるようです。動いているみたいですね。
で
これだけでは面白くないので、「EFERのセーブ/ロード機能があれば使うようにした」という話について簡単に紹介しておきます。
EFERというのはもともとAMD K6で登場したというMSRで、SYSCALL命令、ロングモード (64ビット) やNX (実行禁止) ビットの有効化などに使用されるものです。Intel VT-xにおいては、仮想マシンのロングモードについてはVMCSのVM-Entry Controlsで設定しますが、SYSCALL命令等についてはEFERで設定する必要があります。
BitVisor 1.3までは、このEFERを反映するために、VM-exit MSR-store countおよびVM-exit MSR-store addressなどを使用していました。VM-entry用もあり、任意のMSRの内容を切り替えるために使用することができます。初期のVT-xではGuest IA32_EFERなどのフィールドは存在していなかったので、この方法しかありませんでした。ところが、VMware製品ではこんな使われ方は想定されていなかったようで、問題が発生しました。そこで、Guest IA32_EFERなどのフィールドが使用可能であれば使用する、という風にすることになりました。
その後
BitVisor Summit 3の発表「The Current Status of BitVisor 1.5(仮)」をお聞きになった方はご存知の通り、実はこの任意のMSRの内容を切り替える機能というのが、VM entry/exitにかかる時間をめちゃくちゃ長くしてしまうことが判明しました。
資料の32ページにあるように、ひとつのMSRに300サイクル程度もの時間がかかることが判明したため、現在は同機能はなるべく使わないようになっています。おそらく、Guest IA32_EFERなどのフィールドを使う分にはそこまでのオーバーヘッドは無いものと考えられるので、性能面でもこの修正は必要だったということになりそうです。