ハードウェアによる仮想化はソフトウェアによるものより本当に高速なのか?

VMware の研究者が面白い論文を発表*1している。現状の VT-x/SVM を使った x86 の仮想化はソフトアシストによるものよりも必ずしも高速にならないとのこと。
問題はハードウェアの仮想化支援は MMU まで及んでおらず、MMU をハードウェア VT + ソフトトラップするよりはソフトウェアのみで処理した方が現状では速いとのこと。 従って AMD の Nested Pageing や Intel の EPT が出てくると話が変わるかもしれない。

P.S.

この論文をよく読んでみると、凄いことが色々書いてある。

2.3 Memory traces

To maintain coherency of shadow structures, VMMs typically use hardware page protection mechanisms to trap accesses to inmemory primary structures. For example, guest PTEs for which shadow PTEs have been constructed may be write-protected. Memory-mapped devices must generally be protected for both reading and writing. This page-protection technique is known as tracing. Classical VMMs handle a trace fault similarly to a privileged instruction fault: by decoding the faulting guest instruction, emulating its effect in the primary structure, and propagating the change to the shadow structure.

シェー!! そんなことをしていたのか。
ゲスト OS でのメモリアクセスには理論上ゲスト仮想アドレス → ゲスト物理アドレス → ホスト物理アドレスという 2 段の変換が入るのだが、VT-x も SVM も CPU のオマケ機能なので MMU 自体が 2 段階変換に対応しているわけではない*2。そのために Hypervisor はゲスト仮想アドレス→ホスト物理アドレスのテーブル、いわゆる shadow page table を用意する必要がある。そしてゲストが仮想メモリモードで動いている間、CPU はゲスト OS が用意した本当(true) の page table ではなく、shadow page table の方をアクセスする。当然、shadow page table はゲストから触れない位置に配置される。

Shadow page table は最初ほとんど空のテーブルで、これを CPU がアクセスすると page fault が発生する。Hypervisor はこの page fault を補足して、ゲスト側の true page table をウォーキングしてみる。すると true page table にページテーブルエントリ(PTE)が見つかる。この場合、PTE にはゲスト物理ページのアドレスが書かれている。
Hypervisor はゲスト物理ページアドレスをホスト物理ページアドレスに変換して、対応する PTE を shadow page table に追加してしまう。Hypervisor から抜けるとゲスト側でメモリアクセスをリトライするが、今度は shadow page table に PTE がメモリアクセスが可能という寸法だ。

問題は true page table はゲスト側の都合でいろいろ書き換えられてしまうという点。そうなると true page table と shadow page table の coherent が取れなくなってしまうのだが、この解決に「(true page table の) page の write protection が使われる」という。
意外だ。INVLPG 命令をトラップして書き換えるぐらいだと思っていたのだが…

P.P.S.

っていうか論文の Second Author は O. Agesen さんですよ!!
Sun MicrosystemsGCJIT の研究をやっていたはずなのに、いつの間にか VMware に!!

*1:10/21-25 開催の ACM ASPLOS'06 投稿論文のようなんだけど、発表前にオープンにしても良いものかしら?

*2:Nested Pageing や EPT は、MMU に2段階変換機能を追加させる予定