VT 2016/12/05
INTEL手册VT 25章记录

VMCSs

  • VMPTRLD 激活并成为当前的VMCS
  • VMCS link指针域
  • VMCLEAR反之
  • VMPTRST 存储VMCS到地址,如果没有当前VMCS,则值为FFFFFFFF_FFFFFFFFH

VMCS启动状态DFA如下

img

其中没有说明所有SHADOW VMCS转换成活跃的方式

VMCS域格式

Byte Offset          Contents  
0                    Bits 30:0: VMCS revision identifier  
                     Bit 31: shadow-VMCS indicator
4                    VMX-abort indicator  
8                    VMCS data
VMCS DATA
  • Guest-state area. Processor state is saved into the guest-state area on VM exits and loaded from there on

VM entries.

  • Host-state area. Processor state is loaded from the host-state area on VM exits.
  • VM-execution control fields. These fields control processor behavior in VMX non-root operation. They

determine in part the causes of VM exits.

  • VM-exit control fields. These fields control VM exits.
  • VM-entry control fields. These fields control VM entries.
  • VM-exit information fields. These fields receive information on VM exits and describe the cause and the

nature of VM exits. On some processors, these fields are read-only.

Basic VM-Exit Information

The 31 Bit Position of VM Exit reason is indicate VM-entry failure

VMCS使用要点
  • VMCS不应该在多个逻辑处理器上设置为活动状态。从一个逻辑处理器迁移到另一个应该对此VMCS执行VMCLEAR指令
  • 不要更改活动状态VMCS的shadow-VMCS 标志
  • 修改VMCS使用VMREAD和VMWRITE,不要直接读写内存(在执行VMPTRLD前删除所有VMCS的线性地址映射,在VMCLEAR前不要重映射)
  • VMXOFF或者失去电源逻辑处理器之前使用VMCLEAR
  • 初始化VMCS应该首先调用VMCLEAR
  • 修改VMCS应该确保没有VMX non-root操作会用到其中的数据
  • VMXON指令操作数必须4K对齐,执行VMXON后,不应在VMXOFF前修改此区域

相关错误优先级

以下操作会产生异常而非VM EXIT:

  • 特权等级错误指令、TSS中I/O权限位错误。例如R3调用RDMSR,不会产生VM EXIT
  • 当特定指令操作数优先于VM EXIT,例如LWSW
  • unconditional I/O或者I/O bitmaps控制位比以下优先级高:
  • 通用保护错误,INS用ES段,OUTS用DS段(除非使用指令修饰符)
  • 通用保护错误,超过段描述符偏移限制
  • 对齐检查错误
  • 除去以上的VM EXITS比异常错误优先级高

无条件VM EXITS指令

CPUID GETSEC INVD XSETBV INVEPT INVVPID VMCALL VMCLEAR VMLAUNCH VMPTRLD VMPTRST VMRESUME VMXOFF VMXON

有条件VM EXITS指令

CLTS ENCLS IN INS/INSB/INSW/INSD OUT OUTS/OUTSB/OUTSW/OUTSD INVLPG INVPCID LGDT LIDT LLDT LTR SGDT SIDT SLDT STR LMSW MONITOR MOV XX,CR3 MOV XX,CR8 MOV CR0,XX MOV CR3,XX MOV CR4,XX MOV CR8,XX MOVDR MWAIT PAUSE RDMSR RDPMC RDRAND RDSED RDTSC RDTSCP RSM VMREAD VMWRITE WBINVD WRMSR XRSTORS XSAVES

其他导致VM EXITS 原因

  • 异常(错误、陷阱、终止)基于exception bitmap,包括INT3 INTO BOUND UD2指令
  • Triple错误
  • 外部中断
  • NMIs
  • INIT信号
  • Start-up IPIs
  • 任务切换
  • SMIs
  • VMX-preemption timer
  • interrupt-window exiting标志位
  • NMI-windows exiting标志位

VMX non-root变化的指令

CLTS INVPCID IRET LWSW MOV XX,CR0 MOV XX,CR3 MOV XX,CR4 MOV XX,CR8 MOV CR0,XX MOV CR3,XX

MOV CR4,XX MOV CR8,XX NWAIT RDMSR RDPID RDTSC RDTSCP SWSW WRMSR XRSTORS XSAVES

其他VMX non-root变化

  • external-interrupt exiting标志置位,影响RFLAGS.IF、STI、MOV SS、NMIs行为

VMX non-root特殊特性

  • VMX-preemption timer
  • monitor trap flag
  • 翻译客户物理地址
  • VM函数
  • 虚拟化异常

无限制客户机

第二个之后的处理器支持在非分页保护模式下运行