Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166895
  • 博文数量: 6
  • 博客积分: 2431
  • 博客等级: 大尉
  • 技术积分: 616
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-21 16:15
文章分类

全部博文(6)

文章存档

2012年(1)

2011年(1)

2010年(4)

我的朋友

分类:

2010-09-13 11:45:56

-半虚拟、全虚拟和硬件辅助虚拟化

1998年开始,VMware创造性的将虚拟化引入x86平台,通过二进制翻译(BTBinary Translation)和直接执行的模式,让x86芯片可以同时运行不同的几种操作系统,并且确保性能、稳定性和安全性。 从那时起,数以万计的企业已经从虚拟化中获得了极大的收益。但是,关于虚拟化的几种实现方式,引起了很多误解,为此,希望通过此文澄清几种虚拟化道路的优缺点,以及VMware公司对几种虚拟化之路的支持情况。图1总结了x86虚拟化技术的进展情况,从VMwareBT最近的内核部分虚拟化和硬件辅助虚拟化。

Pic1_500


1. x86虚拟化概览

 

所谓x86服务器的虚拟化,就是在硬件和操作系统之间引入了虚拟化层,如图2所示。 虚拟化层允许多个操作系统实例同时运行在一台物理服务器上,动态分区和共享所有可用的物理资源,包括:CPU、内存、存储和I/O设备。

Pic2_2

2. x86架构上的虚拟化层

近年来,随着服务器和台式机的计算能力急剧增加,虚拟化技术应用广泛普及,很多用户已经在开发/测试、服务器整合、数据中心优化和业务连续性方面证实了虚拟化的效用。虚拟架构已经可以将操作系统和应用从硬件上分离出来,打包成独立的、可移动的虚拟机,从来带来了极大的灵活性。例如:现在可以通过虚拟架构,让服务器7x24x365运行,避免因为备份或服务器维护而带来的停机。已经有用户在VMware平台上运行3年而没有发生任何的停机事件。

对于x86虚拟化,有两种常见的架构:寄居架构和裸金属架构。寄居架构将虚拟化层运行在操作系统之上,当作一个应用来运行,对硬件的支持很广泛。相对的,裸金属架构直接将虚拟化层运行在x86的硬件系统上,可以直接访问硬件资源,无需通过操作系统来实现硬件访问,因此效率更高。VMware PlayerACEWorkstationVMware Server都是基于寄居架构而实现的,而VMware ESX Server是业界第一个裸金属架构的虚拟化产品,目前已经发布了第四代产品。ESX Server需要运行在VMware认证的硬件平台上,可以提供出色的性能,完全可以满足大型数据中心对性能的要求。

为了更好的理解x86平台虚拟化,在此简要介绍一下部件虚拟化的背景。虚拟化层是运行在虚拟机监控器(VMMVirtual Machine Monitor)上面、负责管理所有虚拟机的软件。如图3所示,虚拟化层就是hypervisor直接运行在硬件上,因此,hypervisor的功能极大地取决于虚拟化架构和实现。运行在hypervisor上的每个VMM进行了硬件抽取,负责运行传统的操作系统。每个VMM必须进行分区和CPU、内存和I/O设备的共享,从而实现系统的虚拟化。

Pic3

3. Hypervisor通过VMM管理虚拟机

 

2. CPU虚拟化

根据原来的设计,x86上的操作系统需要直接运行在裸机上,因此默认拥有和控制所有的硬件。如图4所示,x86架构提供了四种特权级别Ring 0123,通过这四种级别来控制和管理对硬件的访问。通常,用户级的应用一般运行在Ring 3级别,操作系统需要直接访问内存和硬件,需要在Ring 0执行它的特权指令。为了虚拟x86架构,需要在操作系统下面运行虚拟化层,由虚拟化层来创建和管理虚拟机,进行共享资源分配。而有些敏感指令不能很好的进行虚拟化,它们在Ring 0以外级别执行时,会出现不同的结果。如何在运行时捕获和翻译这些敏感指令成为x86虚拟化的一大挑战,使得x86架构虚拟化最初是不可能的。

Pic4

4. x86架构虚拟化前的特权级别

VMware1998年成功克服了这个难点,开发出了BT技术,从而将操作系统移到Ring 3的用户模式运行,而VMM运行在Ring 0级别实现隔离和性能提升。尽管VMware通过BT技术实现的全虚拟化已经成为默认的业界标准,超过2万家的VMware用户都在这种技术的支持下可靠、高效运行,但整个业界还没有统一定义的行业标准,因此每家公司都在自由发挥,来试图解决这个技术难点,不同的方案都有自己的优势和劣势。
到今天为止,有三种典型的技术来解决x86虚拟化的难题:*  

* 通过BT实现的全虚拟化

* 操作系统帮助下的虚拟化,也叫半虚拟化

* 硬件帮助的虚拟化


a. 技术1 – 通过BT实现的全虚拟化

VMware可以通过BT和直接执行技术的结合来实现任何x86操作系统的虚拟化。如图5所示,BT可以翻译核心指令来代替那些不能虚拟化的指令,通过翻译后的指令直接访问虚拟硬件。同时,所有用户级指令还是可以直接在CPU上执行来确保虚拟化的性能。每个VMM为每个虚拟机提供完整的硬件支持服务,包括虚拟BIOS、虚拟设备和虚拟内存管理。

Pic5

 

5. BT实现x86架构虚拟化

BT和直接执行技术的结合实现了全虚拟化,此时客户操作系统可以通过虚拟化层从物理硬件上完全抽取出来,客户操作系统感知不到是否发生了虚拟化,完全不需要进行修改。全虚拟化是迄今为止唯一不需要硬件或操作系统协助来进行敏感和特权指令虚拟化的技术,Hypervisor可以翻译所有的操作系统特权指令,并保存在缓存里备用,而用户级的指令完全可以全速直接执行。

全虚拟化提供了最好的虚拟机隔离和安全性,简化了客户操作系统迁移和移植能力。VMware ESX Server就是通过全虚拟化技术来实现的最好案例。

b. 技术2 – 半虚拟化

该文中我们将Para-Virtualization翻译为半虚拟化。Para是来自希腊语的英语前缀,意指“和”、“在边上”、“一道”等。因此,“半虚拟化”指得是客户操作系统和hypervisor之间的通讯如何提高性能和有效性。如图6所示,半虚拟化需要修改操作系统内核,替换掉不能虚拟化的指令,通过超级调用(hypercall)直接和底层的虚拟化层hypervisor来通讯,hypervisor同时也提供了超级调用接口来满足其他关键内核操作,比如内存管理、中断和时间保持。

Pic6

 

6. 操作系统协助的x86架构虚拟化

半虚拟化和全虚拟化不同,全虚拟化不需要修改上面的操作系统,敏感的操作系统指令直接通过BT进行处理。半虚拟化的价值在于降低了虚拟化的损耗,但是半虚拟化的性能优势很大程度上依赖于运行的负载。由于半虚拟化不支持未修改的操作系统(例如: Windows 2000/XP),它的兼容性和可移植性差。在实际的生产环境中,半虚拟化也会导致操作系统支持和维护的艰难,因为半虚拟化往往要深入修改操作系统内核。开源的Xen项目是半虚拟化的代表,它可以通过修改Linux的内核来实现CPU和内存的虚拟化,通过定制的操作系统驱动来实现I/O的虚拟化。

为了实现全虚拟化,需要构建复杂的BT技术,这往往比直接修改客户操作系统来启用半虚拟化更艰难。VMware实际上已经在产品中使用了半虚拟化的一些技术,来构建VMware Tools和优化虚拟设备驱动。VMware tools服务为VMM Hypervisor提供了 一个后门服务,用来同步时间、记录日志和客户操作系统关机等。Vmxnet是半虚拟化的I/O设备驱动程序,它可以和hypervisor共享数据结构。这些半虚拟化技术的应用改善了设备的兼容能力,提高了数据吞吐速率,降低了CPU利用率。需要重点澄清的是:VMware tools 服务和vmxnet设备驱动并不是CPU半虚拟化解决方案,它们紧紧对客户操作系统进行了微小的、非关键的修改,并不需要修改客户操作系统内核。

面向未来,VMware也在帮助开发虚拟化版的Linux来支持半虚拟化技术的进步,更进一步的细节,我们将在后面进行探讨。

c. 技术3 – 硬件辅助虚拟化

硬件厂商面对虚拟化都相当热情,他们都投入了大量的精力来开发新的特性来简化虚拟化技术的应用。第一代的虚拟化增强包括Intel Virtualization Technology (VT-x)AMDAMD-V,这两种技术都为CPU增加了新的执行模式root模式,可以让VMM运行在root模式下,而root模式位于Ring 0的下面。如图7所示,特权和敏感指令自动在hypervisor上执行,从而无需BT或半虚拟化技术。客户操作系统的状态保存在VT-xVirtual Machine Control Structure,虚拟机控制结构)中或AMD-v(Virtual Machine Control Block,虚拟机控制块)。支持Intel VTAMD-VCPU2006年开始推向市场,因此只有新的系统包含了这些硬件辅助的虚拟化功能。

Pic7

 

7.硬件辅助的x86架构虚拟化

由于hypervisor到客户操作系统转换的损耗和严格的编程模式要求,第一代的硬件辅助虚拟化性能并不理想,VMwareBT技术很多时候性能更好。第一代硬件辅助虚拟化为编程留了很小的空间,降低了软件的灵活性,增加了hypervisor到客户操作系统转换的损耗,正式基于此,VMware仅仅在很少的情况下利用了第一代的硬件辅助虚拟化,比如,在Intel平台上支持64位操作系统的时候,VMware使用了IntelVT-x

3. 内存虚拟化

除了CPU虚拟化,下一个关键是内存虚拟化,通过内存虚拟化共享物理系统内存,动态分配给虚拟机。虚拟机的内存虚拟化很象现在的操作系统支持的虚拟内存方式,应用程序看到邻近的内存地址空间,这个地址空间无需和下面的物理机器内存直接对应,操作系统保持着虚拟页到物理页的映射。现在所有的x86 CPU都包括了一个称为内存管理的模块MMUMemory Management Unit)和TLB(Translation Lookaside Buffer),通过MMUTLB来优化虚拟内存的性能。

Pic8

8. 内存虚拟化

为了在一台机器上运行多个虚拟机,需要增加一个新的内存虚拟化层,也就是说,必须虚拟MMU来支持客户操作系统。客户操作系统继续控制虚拟地址到客户内存物理地址的映射,但是客户操作系统不能直接访问实际机器内存。VMM负责映射客户物理内存到实际机器内存,它通过影子页表来加速映射。如图8所示,VMM使用TLB硬件来映射虚拟内存直接到机器内存,从而避免了每次访问进行两次翻译。当客户操作系统更改了虚拟内存到物理内存的映射表,VMM也会更新影子页表来启动直接查询。MMU虚拟化引入了虚拟化损耗,第二代的硬件辅助虚拟化将支持内存的虚拟化辅助,从而大大降低因此而带来的虚拟化损耗,让内存虚拟化更高效。

4. 设备和I/O虚拟化

最后一个模块是设备和I/O虚拟化,也就是如何管理和路由物理设备和虚拟设备之间的I/O请求。

Pic9

9. 设备和I/O虚拟化

基于软件的I/O虚拟化和管理为设备管理带来了新的特性和功能,让设备的管理更容易。就拿网络为例,通过虚拟网卡和交换机可以在一台物理机上不同虚拟机之间建立虚拟网络,而这不会在物理网络上产生任何的流量;网卡teaming允许多个物理网卡绑定成一个虚拟机网卡,提供了很好的容错能力,同时保持了同一MAC地址。I/O虚拟化的关键是保持虚拟化优势的同时,尽量降低虚拟化给CPU造成的负担。

Hypervisor虚拟化物理硬件,为每台虚拟机提供一套标准的虚拟设备,如图9所示。这些虚拟设备高效模拟常见的物理硬件,将虚拟机的请求发送到物理硬件。该硬件标准化的过程也让虚拟机标准化,让虚拟机更容易在各种平台上自由移动,而无需关心下面实际的物理硬件类型。

5. 目前几种x86虚拟化技术对比总结 

VMware目前利用了以上三种的虚拟化技术,或者用在生产上,或者用在开发实验室,在性能和功能之间找到平衡。下表是三种虚拟路线的总结比较,可以看到它们的优劣,从而可以取长补短,对三种虚拟化路线进行科学选择。

 

利用BT的全虚拟化

硬件辅助虚拟化

操作系统协助/半虚拟化

实现技术

BT和直接执行

遇到特权指令转到root模式执行

Hypercall

客户操作系统修改/兼容性

无需修改客户操作系统,最佳兼容性

无需修改客户操作系统,最佳兼容性

客户操作系统需要修改来支持hypercall,因此它不能运行在物理硬件本身或其他的hypervisor,兼容性差,不支持Windows

性能

一般
目前很多情况下比BT性能差,随着时间推移会逐步改善

某些情况下好

应用厂商

VMware/Microsoft/
Parallels

VMware/Microsoft/
Parallels/Xen

VMware/Xen

客户操作系统独立于hypervisor?

XenLinux只能运行在Xen的hypervisor上
VMI-Linux可以支持各种hypervisor

 


Dec 09, 2007

三种虚拟化技术的未来走势

1. 通过BT实现的全虚拟化今天仍是主流

BT支持下的全虚拟化目前仍然是主流,是今天就可以部署的最可靠的虚拟化技术。VMware的虚拟化也在WindowsLinux操作系统环境下提供最高的性能,同时提供了丰富的企业级功能和管理性。通过BT,除了在Intel CPU上不支持64位的客户操作系统, VMware可以在生产环境下支持全虚拟化和硬件辅助虚拟化,并且性能良好。

BT支持下的全虚拟化在未来的几年内将继续保持良好发展势头,不需要更改操作系统,通过高级BT来提高性能。当然,硬件辅助虚拟化也将慢慢走向成熟,推进虚拟化性能不断提升。

2. 硬件辅助虚拟化是未来方向,但是目前性能仍然没有达到预期

去年IntelAMD发布的硬件辅助虚拟化硬件辅助虚拟化的第一步,通过硬件辅助虚拟化,可以移除BT或对操作系统的修改。就像Xen利用的那样, As Xen has 这些初期的功能将建立hypervisor变得简单了很多,再也不需要借助BT或者修改操作系统了。Xen利用这些硬件辅助功能来实现Windows虚拟化,但是性能很差,远不如VMwareBT虚拟化或者XenLinux的半虚拟化。第一代硬件辅助虚拟化部署了苛刻的编程模式,将hypervisor到客户操作系统的损耗大大提高了,这使得第一代硬件辅助虚拟化的性能低于VMwareBT虚拟化实现。VMware正在同IntelAMD一起努力,来增强未来硬件虚拟化的设计,进一步提高硬件辅助虚拟化的灵活性和性能。

第二代的硬件虚拟化将提供更高的性能,大大降低虚拟化损耗。AMDIntel都已经发布了他们的产品路线图,包括硬件支持内存虚拟化(AMD NPTIntel EPT)和硬件支持设备和I/O虚拟化(Intel VT-dAMD IOMMU)

计算密集的负载已经可以通过BT运行在虚拟化平台上,部署NPT/EPT将无需影子页表,而影子页表直接消耗系统内存,为此进一步显著改善虚拟化性能。将来的CPU对虚拟化支持进一步增强,这将推动硬件辅助虚拟化的广泛应用,但不要期望革命性的变化。处理器在进行着快速的升级换代,处理器速度的提升对虚拟化密度和性能的影响预期将远高于硬件辅助对虚拟化的优化。

半虚拟化技术的进步预期不会带来性能进一步巨大提升,而硬件辅助虚拟化的深化,将通过对CPU、内存和I/O的虚拟化,预期会有很大的性能提升,而未来的hypervisor将会普遍支持硬件辅助虚拟化,也就是说硬件辅助虚拟化将成为hypervisor的默认配置,从而带来虚拟化的性能、管理性的进一步改善。 

3. XenCPU半虚拟化带来了性能优势的同时,增加了维护成本

Xen经常将半虚拟化定位为第二代的虚拟化,而将VMware的虚拟化技术标记为第一代虚拟化技术。实际上,半虚拟化是很老的、有用的虚拟化技术,它可以为某些负载带来很好的性能,但一般都会增加维护成本。我们不否认在客户操作系统里安装虚拟化管理应用和设备驱动能提高虚拟化性能,但是数据中心用户必须清晰认识到半虚拟化的性能优势和运行修改过的客户操作系统而花费的大量维护成本之间的厉害冲突。半虚拟化带来的性能提升依赖于运行的负载,大多数用户应用可能因此性能提高很少,很少情况下能达到接近物理机的性能。

Xen的第一大挑战就是处理器的半虚拟化不能支持未经修改的操作系统,很多情况下就不能使用这种方式,比如操作系统本来不允许修改(如Windows),或者有时候需要某种特定版本的Linux。实际上,大多数的数据中心都不愿意将自己的生产应用运行在开源Hypervisor上修改过内核的Linux操作系统中。另外,大量的内核修改会导致客户操作系统和hypervisor之间的数据结构依赖性,该操作系统因此会没法运行在其他的hypervisor或裸物理机上。

尽管很多Linux版本开始将半虚拟化捆绑到操作系统内核里,部署使用半虚拟化操作系统的服务器仍然会增加维护成本和降低灵活性。就象很多公司已经发现半虚拟化的XenLinux不适合企业级应用, 许多虚拟化厂商基于开源Xen而开发的虚拟化产品本身已经放弃了Linux半虚拟化。比如Virtual Iron,他们已经声明半虚拟化走向死亡,已经专注基于硬件辅助的全虚拟化开发,来支持未经修改的操作系统。

这导致了Xen的第二个竞争挑战。Xen 3.x最近紧紧引进了硬件辅助全虚拟化来支持未经修改的操作系统(比如:Windows)VMwareBT技术十分复杂,性能远高于Xen第一代的硬件辅助全虚拟化,Xen厂商完全没法和VMware竞争,包括性能、可靠性、易于管理等方面。但今天经常引起一些误解:很多厂商说他们的Linux半虚拟化性能优势明显,而很多用户认为他们可能并不需要修改操作系统内核,其实这是非常错误的。

当然,VMware也发现对于某些特定的负载,处理器的半虚拟化确实可以大幅提高性能,但是等到第二代硬件辅助出现之后,半虚拟化的性能优势还很难说清楚,性能提升可能会下降、甚至消失,这已经成为一个悬念。

VMware看来,处理器半虚拟化的最大问题是对操作系统的修改,这会导致该操作系统对特定hypervisor的依赖性。对于Xen来说,部署深度半虚拟化将带来对hypervisor的极大依赖性,操作系统的内核紧密链接到hypervisor的实现,这带来严重的兼容性问题,因为此时的XenLinux不能在其他的hypervisor上运行,甚至根本没法直接运行在物理硬件上,从而导致必须维护更多的Linux版本。另外,半虚拟化只适用于新的、开源操作系统,因为对操作系统内核的修改需要操作系统厂商的支持。最后,对hypervisor的依赖性会拖累该操作系统内核的更新。

4. VMware的透明半虚拟化可以平衡性能优势和维护成本

Pic11

1. 通过VMI实现的透明半虚拟化

Xen致力于部署修改Linux内核的半虚拟化的时候,VMware正在致力于标准接口的建立来应用操作系统辅助半虚拟化的同时,使得操作系统维护成本不至于增加很多。2005年,VMware提出了透明半虚拟化接口VMIVirtual Machine Interface,虚拟机接口)的建议标准,建议将VMI作为客户操作系统和hypervisor之间的标准通讯接口。

如图1所示,VMI是位于hypervisor和半虚拟化操作系统之间的接口层,透明半虚拟化保证了同一半虚拟化的操作系统内核可以运行在任何兼容的hypervisor或物理裸机上。它从设计上将所有的VMI调用分成两类,直接内部指令用于裸设备访问,间接调用客户操作系统和hypervisor之间的VMI层,两种方式都确保了性能优异,同时维护性和扩展性也通过VMI的独立性来维持。由于VMI-Linux可以运行适当版本的间接层,使得VMI层可以支持不同的hypervisor

VMware继续和Linux社区保持很好的沟通,一起来开发半虚拟化接口,以支持多种不同的hypervisor2006年,VMware发布了开源VMI规范,在渥太华Linux大会上的VMI建议推进了Linux社区paravirt-ops接口的开发。paravirt-ops接口规范由IBMVMwareRed HatXenSource组成的联合小组共同开发,它包含了很多VMI里面提出的概念,来支持透明半虚拟化。通过这个接口,半虚拟化的Linux操作系统可以运行在任何兼容paravirt-ops接口的hypervisor上。VMware积极致力于paravirt-ops客户操作系统接口的开发,从Linux内核2.6.20开始,paravirt-ops已经成为官方Linux内核的一部分。版本2.6.22内核也包括了VMI后端来补充paravirt-ops接口。通过这个同一的规范,Linux操作系统厂商和ISV都只需要支持单一的内核,虽然进行了半虚拟化,但是没有影响性能或者可维护性,这将大大改善半虚拟化的兼容性。

为了让业界体验这个规范,VMwareWorkstation 6.0里已经开始尝试性支持VMI,在寄居架构支持半虚拟化的操作系统。该版本的Workstation实现了从2005年开始和Linux社区讨论的透明半虚拟化接口。你也可以下载完整版的VMware Player虚拟机监控器,它也可以支持主流厂商的半虚拟化Linux内核。VMware想通过VMware PlayerWorkstation里对半虚拟化的尝试性支持,来让开发人员感受VMware的半虚拟化技术实现。

由于这次尝试性支持是基于寄居的虚拟架构,因此并不是来演示半虚拟化的性能,但它可以演示大量消耗CPU负载性能的提升。接下去VMware将会在我们的hypervisor产品上支持半虚拟化,到那时能就可以尽情体验基于标准的半虚拟化带来的CPUI/O性能的提升。等到半虚拟化操作系统正式投入商业应用,VMware就会在所有的虚拟架构产品线上支持半虚拟化的操作系统。

阅读(10445) | 评论(1) | 转发(2) |
1

上一篇:VMWare ESX and ESXi

下一篇:virsh and libvirt

给主人留下些什么吧!~~

chinaunix网友2010-11-24 20:58:17

太强了,介绍的太详细了,有个问题,对于虚拟化还有分四类的:完全虚拟化、准虚拟化、操作系统虚拟化、硬件虚拟化,那么操作系统虚拟化怎么理解?