配色: 字号:
云计算虚拟化技术进一步解读(2)
2022-04-26 | 阅:  转:  |  分享 
  
云计算虚拟化技术进一步解读(2)

胡经国



三、Intel-VT硬件辅助虚拟化技术详解

2005年冬天,英特尔带来了业内首个面向台式机的硬件辅助虚拟化技术Intel-VT及相关的处理器产品,从而拉开了IA架构虚拟化技术应用的新时代大幕。支持虚拟化技术的处理器,带有特别优化过的指令集,来自动控制虚拟化过程。从而,极大地简化了VMM的设计,VMM的性能也能得到很大提高。其中IA-32处理器的虚拟化技术,称为Intel-VT-x。

安腾处理器的虚拟化技术,称为VT-i。AMD公司也推出了自己的虚拟化解决方案,称为AMD-V。

尽管Intel-VT和AMD-V并不完全相同,但是基本思想和数据结构却是相似的。本文只讨论Intel-VT-x技术。



链接:IAIntelArchitecture),即Intel架构。一般也代指以X86为基础的处理器架构或系统架构。

IAIntelArchitecture),特指ntel的CPU架构。有IA-32和IA-64,代表32位和64位X86是Intel发明的基于CISC结构的处理器架构。



1、新增的两种操作模式

VT-x为IA32处理器增加了两种操作模式:VMXootOperation(VMX根操作)和VMXon-RootOperation(VMX非根操作)。VMM自己运行在VMXrootoperation模式VMXnon-rootoperation模式则由GuestOS使用。两种操作模式都支持Ring0Ring3这4个特权级因此VMM和GuestOS都可以自由选择它们所期望的运行级别。

这两种操作模式,可以互相转换。

运行在VMXrootoperation模式下的VMM,通过显式调用VMLAUNCH或VMRESUME指令,切换到VMXnon-rootoperation模式;硬件自动加载GuestOS的上下文。于是,GuestOS获得运行。这种转换,称为VMentry(虚拟机入口)。

GuestOS运行过程中遇到需要VMM处理的事件,例如外部中断或缺页异常,或者主动调用VMCALL指令,调用VMM的服务的时候(与系统调用类似),硬件自动挂起GuestOS,切换到VMXrootoperation模式,恢复VMM的运行。这种转换,称为VMexit(虚拟机退出)。

VMXrootoperation模式下软件的行为,与在没有VT-x技术的处理器上的行为基本一致;而VMXnon-rootoperation模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生VMexit。



链接:VMX

VMX为虚拟机配置文件或虚拟系统配置文件。



虚拟机控制块

MM(MainMemory,主存储器)和GuestOS共享底层的处理器资源。因此,硬件需要一个物理内存区域,来自动保存或恢复彼此执行的上下文;这个区域称为虚拟机控制块(VMCS),包括:客户机状态区(GuestStateArea),主机状态区(HostStateArea)和执行控制区。

在VMentry时,硬件自动从客户机状态区加载GuestOS的上下文。并不需要保存VMM的上下文,原因与中断处理程序类似。因为,VMM如果开始运行就不会受到GuestOS的干扰。只有VMM将工作彻底处理完毕,才可能自行切换到GuestOS。而VMM的下次运行,必然是处理一个新的事件。因此,每次VMMentry时,VMM都从一个通用事件处理函数开始执行。VMexit时,硬件自动将GuestOS的上下文保存在客户机状态区从主机状态区中加载VMM的通用事件处理函数的地址,VMM开始执行。而执行控制区存放的则是可以操控VMentry和exit的标志位,例如标记哪些事件可以导致VMexit,VMentry时准备自动给GuestOS塞入哪种中断等等。

客户机状态区和主机状态区都应该包含部分物理寄存器的信息例如

控制寄存器CR0,CR3,CR4;

ESP和EIP(如果处理器支持64位扩展,则为RSP,RIP);

CS,SS,DS,ES,FS,GS等段寄存器及其描述项;

TR,GDTR,IDTR寄存器;

IA32_SYSENTER_CS,IA32_SYSENTER_ESP,IA32_SYSENTER_EIP和IA32_PERF_GLOBAL_CTRL等MSR寄存器。

客户机状态区并不包括通用寄存器的内容,VMM自行决定是否在VMexit的时候保存它们,从而提高了系统性能。客户机状态区还包括非物理寄存器的内容,比如一个32位的ActiveState值表明GuestOS执行时处理器所处的活跃状态如果正常执行指令就是处于Active状态如果触发了三重故障(TripleFault)或其它严重错误就处于Shutdown状态,等等。

前文已经提过,执行控制区用于存放可以操控VMentry和VMexit的标志位,包括

⑴、External-interruptexiting(外部中断退出)

用于设置是否外部中断可以触发VMexit,而不论GuestOS是否屏蔽了中断。

⑵、Interrupt-windowexiting(Interrupt-window退出)

如果设置,当GuestOS解除中断屏蔽时,触发VMexit。

⑶、UseTPRshadow(用TPR影子)

通过CR8访问TaskPriorityRegister(TPR)的时候,使用VMCS中的影子TPR,可以避免触发VMexit。同时执行控制区还有一个TPR阈值的设置,只有当GuestOS设置的TR值小于该阈值时,才触发VMexit。

⑷、CRmasksandshadows(CR掩码和影子)

每个控制寄存器的每一位都有对应的掩码,控制GuestOS是否可以直接写相应的位,或是触发VMexit。同时VMCS中包括影子控制寄存器,GuestOS读取控制寄存器时,硬件将影子控制寄存器的值返回给GuestOS。

VMCS(虚拟机控制块)还包括一组位图以提供更好的适应性:

⑴、Exceptionbitmap(除位图)

选择哪些异常可以触发VMexit

⑵、I/Obitmap(I/O位图)

对哪些16位的I/O端口的访问触发VMexit。

⑶、MSRbitmaps(MSR位图)

与控制寄存器掩码相似,每个MSR寄存器都有一组读的位图掩码和一组写的位图掩码。每次发生VMexit时,硬件自动在VMCS中存入丰富的信息,方便VMM甄别事件的种类和原因。VMentry时,VMM可以方便地为GuestOS注入事件(中断和异常)因为VMCS中存有GuestOS的中断描述表(IDT)的地址,因此硬件能够自动地调用GuestOS的处理程序。

更详细的信息请参阅Intel开发手册。



链接:MSR

MSR(ModelSpecificRegister)是CPU的一组64位寄存器。MSR总体来是为了设置CPU的工作环境和标示CPU的工作状态,包括温度控制,性能监控等。



四、解决纯软件虚拟化技术面临的挑战

首先,由于新的操作模式的引入,VMM和GuestOS的执行由硬件自动隔离开来,任何关键的事件都可以将系统控制权自动转移到VMM,因此VMM能够完全控制系统的全部资源。

其次,GuestOS可以运行在它所期望的最高特权级别因此特权级压缩和特权级别名的问题迎刃而解而且GuestOS中的系统调用也不会触发VMexit。

硬件使用物理地址访问虚拟机控制块(VMCS),而VMCS则保存了VMM和GuestOS各自的IDTR和CR3寄存器因此VMM可以拥有独立的地址空间GuestOS能够完全控制自己的地址空间地址空间压缩的问题也不存在了。

中断和异常虚拟化的问题也得到了很好的解决。VMM只用简单地设置需要转发的虚拟中断或异常,在VMentry时,硬件自动调用GuestOS的中断和异常处理程序,大大简化VMM的设计。同时,GuestOS对中断的屏蔽及解除可以不触发VMexit,从而提高了性能。而且VMM还可以设置当GuestOS解除中断屏蔽时触发VMexit,因此能够及时地转发积累的虚拟中断和异常。

五、未来虚拟化技术的发展

我们可以看到,硬件辅助虚拟化技术必然是未来的方向。Intel-VT目前还处在处理器级虚拟化技术的初级阶段,尚需在如下方面进行发展:提高操作模式间的转换速度

两种操作模式间的转换发生之如此频繁,如果不能有效减少其转换速度,即使充分利用硬件特性,虚拟机的整体性能也会大打折扣。

早期的支持硬件辅助虚拟化技术的Pentium4处理器,需要花费2409个时钟周期处理VMentry,花费508个时钟周期处理由缺页异常触发的VMexit,代价相当高。

随着Intel技术的不断完善,在新的Core架构上,相应时间已经减少到937和446个时钟周期。未来硬件厂商还需要进一步提高模式的转换速度,并提供更多的硬件特性来减少不必要的转换。优化翻译后援缓冲器(TLB)的性能

每次VMentry和VMexit发生时,由于需要重新加载CR3寄存器,因此TLB(TranslationLookasideBuffer)被完全清空。虚拟化系统中,操作模式的转换发生频率相当高,因此系统的整体性能受到明显损害。一种可行的方案是为VMM和每个虚拟机分配一个全局唯一ID,TLB的每一项附加该ID信息来索引线性地址的翻译。



链接:TLB

TLBTranslationLookasideBuffer,转换检测缓冲区翻译后援缓冲器是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存。

TLB是一个小的,虚拟寻址的缓存其中每一行都保存着一个由单个PTEPageTableEntry,页表项组成的块。没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。



提供内存管理单元(MMU)虚拟化的硬件支持

即使使用Intel-VT技术,VMM还是得用老办法来处理GuestOS中发生的缺页异常以及GuestOS的客户机物理地址到主机物理地址的翻译。本质原因是VMM完全控制主机物理内存,因此GuestOS中的线性地址的翻译同时牵涉到VMM和GuestOS的地址空间,而硬件只能看到其中的一个。

Intel和AMD提出了各自的解决方案,分别叫做EPT(ExtendedPageTable)和NestedPaging。这两种技术的基本思想是,无论何时遇到客户机物理地址,硬件自动搜索VMM提供的关于该GuestOS的一个页表,翻译成主机物理地址,或产生缺页异常来触发VMexit。支持高效的I/O虚拟化

I/O虚拟化需要考虑性能、可用性、可扩展性、可靠性和成本等多种因素。最简单的方式是VM为虚拟机模拟一个常见的I/O设备。该设备的功能由VMM用软件或复用主机I/O设备的方法实现。例如VirtualPC虚拟机提供的是一种比较古老的S3Trio64显卡。这种方式提高了兼容性,并充分利用GuestOS自带的设备驱动程序;但是虚拟的I/O设备功能有限,而且性能低下。为了提高性能,VMM可以直接将主机I/O设备分配给虚拟机。这样会带来以下两个主要挑战:

⑴、如果多个虚拟机可以复用同一个设备,VMM必须保证它们对设备的访问不会互相干扰。如果GuestOS使用DMA的方式访问I/O设备,由于GuestOS给出的地址并不是主机物理地址,VMM必须保证在启动DMA操作前将该地址正确转换。Intel和AMD分别提出了各自的解决方案,分别称为DirectI/OI/O)(VT-d)和IOMMUnput/OutputMemoryManagementUnit,输入/输出内存管理单元)。希望用硬件的手段解决这些问题,降低VMM实现的难度。



链接:DMA

DMA(DirectMemoryAccess,直接内存存取),是所有现代电脑的重要特色。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。



2017年7月8日修改于重庆

5







献花(0)
+1
(本文系胡经国图书...原创)