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 processor が IA-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 processor が IA-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 が完全仮想化をハード的にサポートしているのか、少し詳細が見えてきた。