分类: 虚拟化
2010-07-19 18:39:40
IA-32处理器提供了四种处理器模式来支持系统的运行,这四种处理器模式分别是:
a) 实模式:实模式是16位的运行模式,跟早期的8086处理器兼容。处理器一开始启动的时候,进入的就是实模式。程序可以通过实模式进入保护模式和系统管理模式;
b) 保护模式:保护模式是32位的运行模式,它扩展了地址位数,同时提供了丰富的保护机制(权限管理机制,包括段保护机制和页保护机制),以及向后兼容机制;
图 3.1 四种模式状态图
c) 虚拟8086模式:在保护模式下提供的兼容8086的模式,使处理器在保护模式下能够更好地运行16位程序;
d) 系统管理模式:特殊的模式,操作系统可以进入该模式进行电源管理;
四种处理器模式的转换关系如图3.1[9]所示:
IA-32上的虚拟化技术,最早可以追溯到虚拟内存管理。虚拟内存管理机制为程序提供了远大于真实内存的虚拟内存。后来,为了能够在保护模式下更好的支持早期的在实模式下的程序的运行,英特尔又加入了虚拟8086模式。虽然虚拟8086模式并不能完全兼容真实的实模式程序,但是也算是英特尔处理器虚拟化的一次尝试。
Intel-VT技术,是英特尔公司设计出的硬件辅助虚拟化的一套解决方案。Intel-VT具体包括分别针对处理器的VT-X/VT-I、芯片组的VT-D和网络的VT-C技术:
a) 处理器虚拟化(VTx/VTi):包括英特尔虚拟化灵活迁移技术(Intel VT FlexMigration)、英特尔VT FlexPriority、英特尔VT 扩展页表(Extended Page Tables):
i. 英特尔VT FlexPriority:当处理器执行任务时,往往会收到需要注意的其它设备或应用发出的请求或“中断”命令。为了最大程度减少对性能的影响,处理器内的一个专用寄存器将对任务优先级进行监控。如此一来,只有优先级高于当前运行任务的中断才会被及时关注。英特尔FlexPriority 可创建 TPR6 的一个虚拟副本,该虚拟副本可读取,在某些情况下,如在无需干预时,还可由客户操作系统进行更改。上述举措可以使频繁使用TPR 的 32 位操作系统获得显著的性能提升。(例如,能够将在 Windows Server* 2000上运行的应用的性能提高 35%)。
ii. 英特尔虚拟化灵活迁移技术(Intel VT FlexMigration):虚拟化的一个重要优势是能够在无需停机的情况下,将运行中的应用在物理服务器之间进行迁移。英特尔虚拟化灵活迁移技术 (Intel VT FlexMigration)旨在实现基于英特尔处理器的当前服务器与未来服务器之间的无缝迁移,即使新的系统可能包括增强的指令集也不例外。借助此项技 术,管理程序能够在迁移池内的所有服务器中建立一套一致的指令,实现工作负载的无缝迁移。这便生成了可在多代硬件中无缝运行的更加灵活、统一的服务器资源池。
iii. 扩展页表(Extended Page Tables,EPT):为了减少实现内存虚拟化(跟影子页表相比)的难度和提升内存虚拟化的性能,VT-X提供了EPT技术,直接在硬件上支持客户虚拟地址->客户物理地址->主机物理地址的两次转换。
b) 芯片组虚拟化(VTd):如果没有VTd技术,虚拟机监控器必须直接参与I/O交易,这不仅会减缓数据传输速度,还会由于频繁的VMM活动而增大处理器的负载。VTd提供了客户操作系统直接访问真实硬件的机制,极大的减少了服务器处理器的负载。
c) 网络虚拟化(VTc):英特尔VT-c 可针对虚拟化进一步优化网络。从本质上来说,这套技术组合的功能与邮局非常相似:将收到的信件、包裹及信封分门别类,然后投递到各自的目的地。通过在专用网络芯片上执行这些功能,英特尔VT-c 大幅提高了交付速度,减少了 VMM 与服务器处理器的负载。VTc包括虚拟机设备队列(VMDq)和虚拟机直接互连(VMDc):
i. 借助虚拟机设备队列(VMDq)最大限度提高 I/O 吞吐率:在传统服务器虚拟化环境中,VMM 必须对每个单独的数据包进行分类,并将其发送到为其分配的虚拟机。这样会占用大量的处理器周期。而借助 VMDq,该分类功能可由英特尔服务器网卡内的专用硬件来执行,VMM 只需负责将预分类的数据包组发送到适当的客户操作系统。这将减缓 I/O 延迟,使处理器获得更多的可用周期来处理业务应用。英特尔VT-c可将 I/O 吞吐量提高一倍以上,使虚拟化应用达到接近本机的吞吐率。每台服务器将整合更多应用,而 I/O 瓶颈则会更少;
ii. 借助虚拟机直接互连(VMDc)大幅提升虚拟化性能:借助PCI-SIG 单根 I/O 虚拟化(SR-IOV)标准,虚拟机直接互连(VMDc)支持虚拟机直接访问网络 I/O 硬件,从而显著提升虚拟性能。如前所述,英特尔VT-d 支持客户操作系统与设备I/O 端口之间的直接通信信道。通过支持每个 I/O 端口的多条直接通信信道,SR-IOV 可对此进行扩展。例如,通过单个英特尔万兆位服务器网卡,可为10个客户操作系统中的每个操作系统分配一个受保护的、1Gb/秒的专用链路。这些直接通信链路绕过了 VMM 交换机,可进一步提升 I/O 性能并减少服务器处理器的负载;
VMX主要针对两类软件提供支持:
a) 虚拟机监控器:在VMX的支持下,虚拟机监控器能够获取处理器的最高权限;
b) 客户软件:VMX提供一套敏感指令,当客户软件在执行的过程中遇到敏感指令的时候,就会将控制权交给虚拟机监控器;
图 3.2 VMX转换
针对这两类软件,VMX提供了两类操作模式:根操作模式和非根操作模式。虚拟机监控器运行在根操作模式下,客户软件运行在非根操作模式下。两种模式的转换称为VMX转换(如图3.2[10]和图3.3[11])。
图 3.3 Intel-VT在操作期间的转换
图3.3:白色的区域代表VMM在根操作模式下,而交叉阴影和黑点的区域代表两个活动虚拟机的运行阶段。
软件在VMX的生命周期:
a) 软件通过VMXON指令激活VMX模式,当处理器激活VMX模式时,是处在根操作模式下;
b) 当处理器处于根操作模式下,通过执行VMLAUNCH和VMRESUME指令(如图3.5),处理器能够进入非根操作模式;
c) 从VMX非根操作模式退出到根操作模式的原因很多,基本上分为条件退出和无条件退出两大类;
d) 当处理器处于根操作模式下时,软件可以通过执行VMOFF指令,退出VMX模式;
处理器在VMX模式下的行为基本等同于处理器在保护模式下的行为,除了以下几点:
a) VMX根操作模式有一套新的指令(VMON,VMOFF等)
b) 在VMX根操作模式下,CR0和CR4的某些值是不支持的;
c) 如果一个逻辑处理器是在A20模式下,那么VMX开启就会失败;
d) INIT信号在VMX根操作模式下是阻塞的;
客户操作系统在非根操作模式下运行。当客户操作系统遇到一些预先设定的条件时,会自动退出到根操作模式下。
从非根操作模式退出到根操作模式下,主要分为两种情况:
1. 无条件退出:即遇到某一个事件的时候,直接退出;
2. 有条件退出:即遇到某一个事件的时候,根据VMCS的控制执行域的设置来决定是否退出;
针对VMX操作,Intel定义了虚拟机控制结构。这个结构只能够被VMCLEAR, VMPTRLD, VMREAD, 和VMWRITE操作。
在逻辑上,虚拟机控制结构被划分为6部分:
a) GUEST-STATE域:虚拟机从根操作模式进入非根操作模式时,处理器所处的状态;
b) HOST-STATE域:虚拟机从非根操作模式退出到根操作模式时,处理器所处的状态;
c) VM执行控制域:虚拟机在非根操作模式运行的时候,控制处理器非根操作模式退出到根操作模式;
d) VM退出控制域:虚拟机从非根操作模式下退出时,需要保存的信息;
e) VM进入控制域:虚拟机从根操作模式进入非根操作模式时,需要读取的信息;
f) VM退出信息域:虚拟机从非根操作模式退出到根操作模式时,将退出的原因保存到该域中。
第一代的Intel-VT技术,并没有提供硬件支持的内存虚拟化技术。因此,内存虚拟化一般采用影子页表(这里不做详细介绍)。
第二代的Intel-VT技术,提供了硬件支持的内存虚拟化技术:VPID和EPT。
VPID是一种硬件级的对TLB资源管理的优化。通过在硬件上为每个TLB项增加一个标志,来标识不同的虚拟处理器地址空间,从而区分开虚拟机监控器以及不同虚拟机的不同处理器的TLB。
在软件上使用VPID非常简单,主要做两件:
a) 为每个VMCS分配一个VPID,且这个VPID只要是非0的,且和其他VMCS的VPID不同就可以了;
b) 在VMCS中将Enable VPID置1;
图 3.4 EPT原理图
EPT是在原有的CR3控制寄存器页表地址映射的基础上,引入了EPT页表的另一次映射。这样,GVA(客户操作系统的虚拟地址)->GPA(客户操作系统的物理地址)->HPA(宿主操作系统的物理地址)两次地址转换都由CPU硬件自动完成。
图3.4[12]是EPT原理图。这里假设客户机页表和EPT页表都是4级页表,CPU完成一次地址转换的基本过程:
1. CPU从Guest CR3指向的L4页表。由于Guest CR3指向的是GPA,因此CPU需要通过EPT页表来实现Guest CR3 GPA->HPA的转换。CPU首先会查看硬件的EPT TLB,如果没有对应的转换,CPU会进一步查找EPT页表,如果还没有,CPU则抛出EPT Violation异常由虚拟机监控器来处理;
2. 获得L4页表地址后,CPU根据GVA和L4页表项的内容,来获取L3页表项的GPA。如果L4页表中GVA对应的表项显示为“缺页”,那么CPU产生Page Fault,直接交由Guest Kernel处理。注意,这里不会产生VM-Exit。获得L3页表项的GPA后,CPU同样要通过查询EPT页表来实现L3 GPA->HPA的转换,过程和上面一样。CPU会依次查看L2,L1页表,最后获得GVA对应的GPA;
3. 获取GPA之后,CPU通过查询EPT页表获得HPA;
在虚拟的环境下,虚拟机有诸多的设备,包括虚拟机监控器模拟的虚拟设备和直接分配给客户机的物理设备,这些设备都需要发送中断给VCPU,以便得到处理。因此,虚拟机监控器也需要提供中断虚拟化的支持。
图3.5[12]展示了物理平台的中断架构。首先,I/O设备通过中断控制器(I/O APIC或者PIC)发出中断请求,中断请求经由PCI总线发送到系统总线上,最后目标CPU的local APIC部件接收中断,CPU开始处理中断。
在虚拟机的环境中,虚拟机监控器也需要为客户操作系统展现一个与物理中断架构类似的虚拟中断架构。如图3.6[12]所示。和物理平台相比,每个VCPU都对应一个虚拟Local APIC用于接收中断。虚拟平台也包含了虚拟I/O APIC或者虚拟PIC用于发送中断。
图 3.5 物理平台的中断架构
图 3.6 虚拟机中断架构
由于现在操作系统跟外设有大量的交互,因此虚拟机监控器必须支持客户操作系统的I/O请求,即I/O虚拟化。I/O虚拟化的支持必须采用以下几种模型之一[13]:
a) 仿真:虚拟机监控器为客户操作系统模拟一个设备。I/O虚拟化可以提供很好的兼容性,但是在性能上也受到了很大的限制;
b) 新的软件接口:这种模型类似于I/O仿真,不同之处在于虚拟机监控器提供的是针对客户软件设计的设备接口。
c) 直接分配:虚拟机监控器直接分配设备给客户软件。这种模型需要额外的硬件设备支持。
d) I/O设备分享:这种模型是直接分配模型的扩展。一个I/O设备支持多个接口,每个接口分配给一个虚拟机。
为了实现直接I/O分配,Intel-VT为虚拟机监控器提供了以下几种功能[13]:
a) I/O设备直接分配:分配I/O设备给虚拟机,扩展虚拟机的保护和隔离属性;
b) DMA重映射:从硬件的直接内存访问,提供独立的地址转换;
c) 中断重映射:支持中断路由给合适的虚拟机;
d) 可靠性:记录和报告中断错误给系统DMA;
DMA重映射为设备访问内存提供硬件隔离。通过不同的I/O页表,使得每个硬件设备分配到特定的域。当设备尝试访问系统内存是,DMA拦截访问,并且判断是否允许该访问,同时他还决定真实的访问位置。频繁的使用I/O表数据结构,该数据结构能够被缓存。DMA重映射机制能够被每个设备独立的配置。
中断重映射提供重映射和路由从I/O设备的中断请求。
Intel-VT技术是英特尔公司推出的旨在提高虚拟机安全性和性能,降低开发虚拟机难度的硬件辅助虚拟化方案。Intel-VT包括处理器虚拟化,芯片组虚拟化和网络虚拟化。
Intel处理器在保护模式的基础上,提供了VMX模式,以支持Intel-VT技术。VMX模式又分为根操作模式和非根操作模式两种子模式。虚拟机监控器运行在根操作模式下,客户操作系统运行在非根操作模式下。
虚拟机控制结构是处理器专门为VMX设计的一种数据结构,用来支持根操作模式和非根操作模式之间的切换。