Virtual Machine Control Data Structure (VMCS)

VMCS とは、VM exit/entry 時のハードウェアの情報の保持したり、振る舞いを制御するデータ構造体である。VMCS に含まれる情報を以下に示す。ただし、これらの情報はごく一部でしかないので、詳細は、
ntel 64 and IA-32 Architectures Software Developer's Manual
Volume 3B: System Programming Guide
http://www.intel.com/Assets/PDF/manual/253669.pdf
を参照するべし。


- Guest-state area
ゲスト OS 用のプロセッサのレジスタ値を保持する。VM exit のときにセーブし、VM entry 時にロードする。Control Registers(CR0, CR3, and CR4)や、Segment Rregister 等の一部のフィールドを保持する。


- Host-state area
ホスト OS 用のプロセッサのレジスタ値を保持する。VM exit のときに、ロードする。Guest-state と中身は基本的に大体同じ。


- VM-execution control fields
VMX non-root operation でのプロセッサの振る舞いを制御するフィールド。また、VM exit を引き起こした要因も保持する。
前者の例
bit 9 が 1であれば、INVLPG を実行すると VM exit を引き起こす
bit 15 が 1 であれば、CR3 に write すると、VM exit を引き起こす
bit 16 が 1 であれば、CR3 を read すると、VM exit を引き起こす

後者の例
bit 0 が 1 であれば、VM exit を引き起こしたのは外部割込み
bit 3 が 1 であれば、VM exit を引き起こしたのは NMI


など。


- VM-exit control fields
VM exit の振る舞いを制御する。

bit 9 が 1 であれば、VM exit 後、logical processorIA-32e mode となる。
bit 18 が 1 であれば、IA32_PAT MSR を VM exit 時に保存する。
bit 19 が 1 であれば、IA32_PAT MSR を VM exit 時にロードする。

など


- VM-entry control fields
VM entry の振る舞いを制御する。
bit 9 が 1 であれば、VM entry 後、logical processorIA-32e mode となる。
bit 14 が 1 であれば、IA32_PAT MSR を VM entry 時に保存する。
bit 15 が 1 であれば、IA32_PAT MSR を VM entry 時にロードする。


- VM-exit information fields
最後に発生した VM exit の情報を保持する。以下、いくつかのフィールドの例をあげる。

    • Exit reason: VM exit の要因に関する情報。
    • Exit qualification: VM exit の要因の詳細情報。例えば、INVLPG で引き起こされたとか、そういうもの。
    • Guest-linear address: このフィールドは VM exit を引き起こした命令のメモリオペランドの内容。LMSW 命令や、INS/OUTS 命令などが VM exit を引き起こした場合、使用される。
    • Guest-physical address: このフィールドは、EPT violation や、EPT misconfigurations によって VM exitが引き起こされた場合に使用される。

ようやく Intel が完全仮想化をハード的にサポートしているのか、少し詳細が見えてきた。