扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
从根本上讲,虚拟化主要集中在软件层面,毕竟虚拟机本身就是一个逻辑性的产物,不过就像CPU会集成越来越多的指令集以方便软件编写,并提升软件运行速度那样,既然虚拟化也是一种软件应用,那么CPU也完全有加速之道,其目的就在于将服务器虚拟化过程中,对CPU的计算资源的占用降到最低,你可以相像以前所说的硬RAID与软RAID之分,软RAID就是指RAID的相关算法处理与管理由CPU负责,硬RAID则是由RAID控制器自己的处理单元负责,从而解放了CPU的处理资源。虚拟化也是如此,我们将这种源自CPU自身设计的,以增强虚拟化应用性能与能力的技术称为CPU虚拟化辅助技术,它就相当于把虚拟化的相关处理功能做了“硬化”,而不再过分需要CPU的通用计算能力来软实现。在这方面,英特尔处理器的虚拟化辅助技术至今已经走过4年的历史,也使得x86虚拟化平台的发展得以突飞猛进。
事实上,英特尔为了优化服务器的虚拟化性能,根据自身的产品线提出了4个虚拟化辅助技术,分别是面向x86处理器的VT-x、面向安腾(Itanium)处理器的-VT-i、面向系统平台I/O的VT-d以及面向平台网络连接的VT-c,我们今天主要 简要来谈谈VT-x的发展和一些最新的功能,而其他三个虚拟化技术则在日后另文专述。
英特尔虚拟化的发展轨迹,随着新技术的不断加入,虚拟化中的系统开销也在逐步降低
第一代虚拟化技术:VT FlexPriority与VT FlexMigration
英特尔的VT-x技术最早出现在2006年,应用于至强5100、5300和7300,在当时它所提供的辅助加速技术并不多,只有两个,但都是虚拟机管理器(VMM,Virtual Machine Manager,又称Hypervisor)所最为急需的,它们就是VT FlexPriority与VT FlexMigration。
VT FlexPriority——优化虚拟机中断请求
在传统服务器上,只装有一个操作系统,而这个操作系统享有这个服务器的所有资源,包括CPU。而CPU在处理任务时,有一个重要的功能就是中断请求,它用来在不同任务间根据优先级进行切换。但是,当服务器通过虚拟化生成若干个虚拟机时,这个服务器中实际上就有若干个“自以为独享硬件平台”的操作系统,而此时虚拟机相对于CPU来说是一个个大的“任务”,如何处理好这些虚拟机的中断请求,对于虚拟化的效率就至关重要。英特尔处理器中都会一个专门的中断控制器,即Advanced Programmable Interrupt Controller (APIC,高级可编程中断控制器),它通过一个任务优先寄存器(TPR,Task Priority Register),以优先级的顺序来管理中断请求。VT FlexPriority则将TPR复制,虚拟机可以自行修改TPR的副本,并直接与CPU打交道,而不再需要VMM的干预,多费一道手续,从而提高了虚拟化性能,根据英特尔的测试,对于采用32位操作系统的虚拟机,VT FlexPriority可以提高35%的性能。
在传统没有VT FlexPriority的情况下,虚拟机(VM)要频繁的通过VMM访问APIC-TPR,就存在了大量的VM Exits与VM Entry的操作,这就意味着大量的系统开销,而VT FlexPriority则将VM的中断请求从VMM旁路出来,大大提高了虚拟机的运行效率
VT FlexMigration——让虚拟机平滑迁移
虚拟化的一大好处就是可以让虚拟机自由的,在由多台服务器组成的虚拟化资源池中进行迁移,比如当某台服务器的物理资源紧张时,需要更多资源的虚拟机就可以迁移到资源相对空闲的物理服务器上,再比如某台服务器要做系统维护必须下线,那么虚拟机可以暂时迁移到其他服务器上,以确保应用的持续在线。但是,CPU是在不断进步的,每一代CPU都可能在指令集方面有所差异(比如SSE指令集的版本),所以为了保证在不同CPU(仅限英特尔自己的产品)平台系统间进行平滑的迁移,英特尔推出了VT FlexMigration技术,其主要就是建立在CPUID虚拟化的基础上来善意的“欺骗”VMM。借助这一技术,VMM可以在迁移池中的不同服务器间建立起一组协调一致的指令集,以确保迁移的平滑进行,而不会因为VM请求一个目的服务器所不支持的指令集功能而出现错误,从而让虚拟机迁移的优势发挥到最大。
第二代虚拟化技术——EPT与VPID除了以上两个技术外,在于2009年推出的Nehalem家族处理器上,英特尔又为VT-x增加了两个重要的技术:EPT与VPID
EPT——降低虚拟内存访问的系统开销
EPT即Extended Page Tables(扩展页表)的缩写。CPU要通过主机物理地址来访问内存。如果只是一台物理服务器,这个物理地址就只为一个操作系统服务,但如果进行了虚拟化部署,有多个虚拟机时,就存在着稳定性的隐患。因为在进行VM Entry(虚拟机进入)与VM Exit(虚拟机退出)时(尤其是后者),都要对内存页进行修改。但物理内存是多个虚拟机共享的,因此不能让虚拟机直接访问物理地址,否则一个虚拟机出现内存错误,就会殃及整个物理服务器的运行。所以必须要采取虚拟地址,而EPT的作用就在于加速从虚拟机地址至主机物理地址的转换过程,节省传统软件处理方式的系统开销。
EPT的工作流程图示
在实际的工作中,每个虚拟机都拥有自己一个的IA-32/64的页表,并通过控制寄存器3将虚拟机的线性地址转换成所谓的虚拟机物理地址,最后再通过EPT转换成主机物理地址。要指出的是,IA-32/64页表是放在虚拟机中的,而EPT是放在虚拟机管理器(VMM)里。所以,虚拟机上的软件可随意去修改自己的页表,当一个虚拟机出现问题,或者出现页表错误时,由于EPT是放在VMM中,所以不受虚拟机错误的影响,从而保证了物理内存的安全。
由此可见,EPT首要的出发点是保护物理内存的安全,同时可大幅度降低了虚拟机退出时的系统开销,而且也可以减少虚拟机退出的频率。
VPID——提升虚拟机迁移效率
虚拟处理器标识(VPID,Virtual Processor IDs)是对现在的CPUID功能的一个强化,因为在每个CPU中都有一个TLB,用来缓存逻辑地址到物理地址的转换表,而每个虚拟机都有自己的虚拟CPU来对应。所以,在进行迁移时要进行TLB的转存和清除。而VPID则会跟踪每个虚拟CPU的TLB,当进行虚拟机迁移或VM Entry与VM Exit时,VMM可以动态的分配非零虚拟处理器的ID来迅速匹配(0 ID给VMM自己使用),从而避免了TLB的转存与清除的操作,节省了系统开销,并提高了迁移速度,同时也降低对系统性能的影响。
VPID的主要途在于快速的虚拟机迁移
在虚拟化迁移延迟性能方面,由于系统开销更低,Nehalem相比上一代 家族有了明显降低
可以说有了EPT和VPID的加入,让英特尔处理平台的虚拟化性能有了进一步提高,为客户的服务器虚拟部署提供了更好的保障。
第三代虚拟化技术:Pause-Loop Exiting2010年3月,英特尔推出了最新的6核32nm处理器家族Westmere,随它而来的也有一个新的VT-x虚拟化技术,即Pause-Loop Exiting(PLE,暂停-循环退出),它的主要用意就是减少因为循环等待而造成了CPU虚拟资源的浪费。
而一个拥有两个vCPU的SMP(多对称多处理器)虚拟机中,由于串行代码仍然大量存在(不可能全是并行的代码),所以在串行代码执行时的保护机制,会给vCPU“上锁”,此时另一个vCPU则将进入处旋状态,等待得到这个锁来执行指令(这与编程相关),在这个不断的自旋等待中,就造成了CPU资源的浪费,vCPU的数量越多,这种影响就会越严重。而PLE则可以将这种循环锁的造成的CPU资源的浪费大幅度降低。
虚拟机中两个vCPU的锁止与等待示意图
PLE通过设置自旋等待暂停指令,以及相应的暂停周期来触发相应的退出动作。它定义了两个周期间隔,一个PLE_Gap,它是指在一个自旋循环中两个暂停指令的间隔,而另一个是PLE_Window,是指在执行虚拟机退出前所经过的等待循环的周期。比如,当一个暂停指令发出时,如果与上一代暂停指令之间超出了PLE_Gap的规定,那么PLE就设定开始了一个新的循环,而如果没有超出,那么就进行周期的累加,直到超过PLE_Window即触发虚拟机退出动作。VMM可以对于PLE的设定进行配置。
这是一个典型的PLE指令模式,当得到锁的尝试失败后,即发出暂停指令,如果没有得到锁的时长超过了PLE_Window,那么就触VM Exit操作,而如果在PLE_Window之内得到了锁,那么显然下一次的暂停指令将会超出标准的PLE_Gap,从而开始新的一个自旋等待周期。PEL的最大作用在于检测锁抢占状态,如果发生了锁抢占状况(上图中的上面的状态,其他vCPU经历了多次尝试仍然无法获得锁),那么VMM将重新进行vCPU的规划与调配,以尽量降低vCPU的无效时间
通过采用PLE,我们可以看出来,虚拟机越多(vCPU越多)时,PLE较非PLE平台的性能最多可提高40%,性能优化效果非常明显
从Nehalem开始,超线程(HT)技术也正式回归英特尔处理器,从而也让虚拟化进一步获益,因为它能提供两倍的逻辑处理器,这也意味着多虚拟机的并行处理能力的进一步增强,而PLE则在此基础上锦上添花,使vCPU的利用效率更高,而这也是最新一代Westmere相对于Nehalem处理器,在虚拟化方面的最大进步。而在未来,英特尔还将进步完善VT-x技术,使x86虚拟化平台的CPU系统开销再创新低。