VMCS是Intel VT-x中一个很重要的数据结构,它占用一个page大小,由VMM分配,但是硬件是需要读写的,有点类似于页表。vmcs的各个域在manual中有说明,但是每个域在vmcs页中的具体位置是不知道的,程序员不用关心,只需要用相应的VMWRITE和VMREAD指令去访问。这样做的好处是,vmcs页中结构的具体layout可以透明的进行变动。
下面从三个方面总结一下:
一是vmcs组成部分;
二是kvm中vmcs分配与初始化路径;
三是kvm配置vmcs中一些重要的域。
首先来看vmcs组成部分,这个可以参考"IA32 Intel Architecture Software Developer's Manual Volume 3B System Programming Guide",这里简单总结一下:
* 1. Guest State Area
* 2. Host State Area
* 3. VM Execution Control Fields
* 3.1 32bit pin-based exec ctrl
* 3.2 32bit cpu-based exec ctrl
* 3.3 32bit cpu-based secondary exec ctrl
* 3.4 32bit exeception bitmap
* 3.5 64bit physical addr of I/O bitmaps A and B(each is 4KB in s
* 2. Host State Area
* 3. VM Execution Control Fields
* 3.1 32bit pin-based exec ctrl
* 3.2 32bit cpu-based exec ctrl
* 3.3 32bit cpu-based secondary exec ctrl
* 3.4 32bit exeception bitmap
* 3.5 64bit physical addr of I/O bitmaps A and B(each is 4KB in s