CPU虚拟化

X86硬件虚拟化的挑战

CPU虚拟化_第1张图片

 

X86硬件操作系统被设计为直接在裸机硬件上运行,因此他们自然地会认为他们完全拥有计算机硬件资源。如图1所示:X86架构提供了4类特权:Ring0,1,2,3,用于管理对计算机硬件的访问。用户层应用程序通常在Ring3运行,操作系统需要直接在Ring0中的执行特权来访问内存和硬件。虚拟化X86架构需要在操作系统下放置一个虚拟层来创建和管理分配共享资源的虚拟机。

更复杂的情况是。一些敏感的指令不能完全地虚拟化,因为他们在Ring0执行前具有不同的语义。捕获和翻译这些敏感和特权指令是很困难的,这就使最初的X86架构虚拟化架构看起来没有可能性。

VMware在1998年解决了这个挑战,发展了二进制翻译技术,允许VMM运行在Ring0层实现隔离和性能,将操作系统移动到权限高于Ring3的应用程序并且权限低于Ring0的虚拟机监视器。虽然VMware使用二进制翻译的完全虚拟化方案基于VMware的20000个客户群和大型合作伙伴生态系统的事实上的标准,但整个行业尚未就定义和管理虚拟化的开放标准达成一致。每一个开发虚拟化解决方案的公司都可以解释技术挑战,挖掘不同优劣势的解决方案。

如下所示,现如今存在三种替代技术可以用于处理敏感和特权指令,在X86的架构上虚拟化CPU

1.使用二进制翻译的全虚拟化

2.操作系统辅助虚拟的半虚拟化

3.硬件辅助虚拟化

技术1——使用二进制翻译的全虚拟化

CPU虚拟化_第2张图片

全虚拟化为客户机提供了完整的虚拟X86平台, 包括处理器、 内存和外设, 支持运行任何理论上可在真实物理平台上运行的操作系统, 为虚拟机的配置提供了最大程度的灵活性。不需要对客户机操作系统做任何修改即可正常运行任何非虚拟化环境中已存在基于X86平台的操作系统和软件,这也是全虚拟化无可比拟的优势。

在全虚拟化情况下,虚拟机并不知道自己运行在虚拟化环境下,是无感知的,安装使用时跟在物理机上没有什么区别。但是这种完全虚拟化中间需要软件做支撑的,需要软件去模拟提供所有的硬件资源,至少是这个CPU的特权指令需要用软件去模拟的,因为你要让各Guest并不知道自己运行在虚拟环境中,那么你就必须要提供一个带有特权指令的CPU。

在虚拟化环境中,通常虚拟跟模拟是两个概念,VMWare的动态二进制翻译技术(BT)是虚拟的而QEMU软件技术是模拟的。最大的区别在于,模拟通过软件实现时需要模拟CPU ring 0-3,也就是需要转换CPU ring 0-3所有的指令,而虚拟只需要转换CPU ring 0特权指令即可。

当然不管上面说到的BT技术还是QEMU还是硬件辅助虚拟化技术都属于完全虚拟化技术,都是需要指令转换的,都是需要复杂的步骤才能完成的,如果我们能够精简这其中的步骤那么虚拟机的性能一定会有提升的。那么怎么精简呢?这就是下面说的半虚拟化技术。另外,在全虚拟化模式下:

CPU如果不支持硬件虚拟化技术:那么所有指令都是通过VMM虚拟的,通过VMM内的BT动态翻译技术把虚拟机要运行的特权指令转换为物理指令集,然后到CPU上运行。

CPU如果支持硬件虚拟化技术:VMM运行ring -1,而GuestOS运行在ring 0。

技术2——系统调用的Para-virtualization(半虚拟化

软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过VMM软件来实现对各个虚拟机的监控,以保证它们之间彼此独立和隔离。 但是付出的代价是软件复杂度的增加,和性能上的损失。减轻这种负担的一种方法就是,改动客户操作系统,使它知道自己运行在虚拟环境下,能够与虚拟机监控机协同工作。这种方法就叫半虚拟化(para-virtualization)。虚拟机内核明确知道自己是运行在虚拟化之上的,对于硬件资源的使用不再需要BT而是自己向VMM申请使用,如对于内存或CPU的使用是直接向VMM申请使用,直接调用而非翻译。就算对于I/O设备的使用它也可以通过Hyper Call(Hypervisor提供的系统调用)直接可以跟硬件打交道,减少了中间的翻译步骤自然性能就好了,据说这种半虚拟化方式能够让虚拟化达到物理机90%的性能。本质上,半虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,半虚拟化需要修改客户机操作系统的源代码来实现主动通知。

技术3——硬件虚拟化

CPU虚拟化_第3张图片

 

硬件辅助虚拟化(HVM),简而言之,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,甚至,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。可以理解为CPU额外增加了一个ring -1环专门提供给虚拟机运行的。以X86平台的虚拟化为例,支持虚拟技术的X86 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。VMM还可以利用硬件的虚拟化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到VMM指定的虚拟资源,整个过程不需要暂停客户机的运行和VMM软件的参与。

由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM 设计,进而使VMM能够按通用标准进行编写, 性能更加强大。

需要说明的是, 硬件虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM软件的情况下,也会比完全不支持虚拟化技术的系统有更好的性能。鉴于虚拟化的巨大需求和硬件虚拟化产品的广阔前景,Intel一直都在努力完善和加强自己的硬件虚拟化产品线。自2005年末,Intel便开始在其处理器产品线中推广应用Intel Virtualization Technology(IntelVT)虚拟化技术,发布了具有IntelVT虚拟化技术的一系列处理器产品,包括桌面的Pentium和Core系列,还有服务器的Xeon至强和Itanium安腾。Intel一直保持在每一代新的处理器架构中优化硬件虚拟化的性能和增加新的虚拟化技术。现在市面上,从桌面的Core i3/5/7,到服务器端的E3/5/7/9,几乎全部都支持Intel VT技术。可以说, 在不远的将来, Intel VT很可能会成为所有Intel处理器的标准配置。当然AMD的CPU也都支持虚拟化技术。

 

你可能感兴趣的:(虚拟化,运维,centos,云计算)