虚拟化技术的权衡

虚拟化技术的权衡

对于X86架构,首先要熟悉几个寄存器。
  • CR3: 存放guest的GPA偏移,或者在VM-Exit后,翻译HPA的阶段加载HPA的偏移。
  • VMCS:每个CPU核都维护一个控制寄存器。包含中断路由,IDT表,Guest和Host的寄存器状态。它是VMM的主要控制部分。
  • EAX=80000008h CPUID, 决定物理地址的长度,通常51~12(x64架构),这个索引是指存储在内存的PML4T,PDPT,PDT,PT中每个64bit条目(Entry)中物理地址的偏移。 搭配从虚拟地址中9bit范围指示的偏移,一层层找到具体的物理地址。39 代表 EAX 返回的值是 40-1(MAXPHYADDR),一般情况下配置位40.
 
 
初学者要澄清的是:
  • EPT不是一个表,EPT是一个机制。EPT机制中依赖MMU实现两个层次(two-level translate,虚拟机内部,虚拟机到宿主),每次translate经过最多四次Hash(Walk)。
  • 不管是在VMX还是在VMM里,CR3都是会被MMU当作基地址加载。触发EPT机制的四次Walk。
  • 不会每次都去Walk,如果TLB或Cache里有的话,直接就返回CPU对应的HPA地址了。
 
 
对于64位系统虚拟地址:16+[ 9 ( 4层页表映射表 )+ 9(页目录指针) + 9(页目录偏移) + 9(页面偏移) + 12(字节偏移) ]