正在阅读:虚拟化类型与处理器辅助虚拟化技术虚拟化类型与处理器辅助虚拟化技术

2007-11-22 09:05 出处:PConline 作者:网络文摘 责任编辑:gongjianhui

  

  
  随着双核多核技术的出现,处理器的性能和功能将越来越强大,而用户使用电脑的模式也向多种平台和多操作系统混合应用的方向发展:对商业用户来讲,虚拟化的主要好处是客户端定位和恢复,帮助减少宕机时间和简化系统迁移工作;而对于消费用户则可以同时运行多项娱乐应用,如在不同的地点同时进行PVR和游戏任务等。

  除了适合多操作系统平台的混合应用以外,虚拟化还可以很方便、高效地实现负载隔离、整合、迁移和嵌入式应用。

  当前主流的虚拟化技术共是三种,分别是:完全虚拟化、准虚拟化及操作系统层虚拟化。

  完全虚拟化

  最流行的完全虚拟化方法是使用名为hypervisor的一种软件,在虚拟服务器和底层硬件之间建立一个抽象层。hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,hypervisor给处理器带来开销。

  在完全虚拟化的环境下,hypervisor运行在裸硬件上,充当主机操作系统;而由hypervisor管理的虚拟服务器运行客户端操作系统(guest OS)。

  VMware和微软的Virtual PC是完全虚拟化方法的两个商用产品,而基于核心的虚拟机(KVM)是面向Linux系统的开源产品。

  
  准虚拟化

  完全虚拟化是处理器密集型技术,因为它要求hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor协同工作。这种方法就叫准虚拟化(para-virtualization)。

  Xen是开源准虚拟化技术的一个例子。操作系统作为虚拟服务器在Xen hypervisor上运行之前,它必须在核心层面进行某些改变。因此,Xen适用于BSD、Linux、Solaris及其他开源操作系统,但不适合对像Windows这些专有的操作系统进行虚拟化处理,因为它们无法改动。

  操作系统层虚拟化

  实现虚拟化还有一个方法,那就是在操作系统层面增添虚拟服务器功能。Solaris Container就是这方面的一个例子,Virtuozzo/OpenVZ是面向Linux的软件方案。

  就操作系统层的虚拟化而言,没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户账户)。

  虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。

  在三种方法中完全虚拟化性能受到的影响最大,但提供了这个优点:既能让客户端操作系统彼此完全隔离,还能让它们与主机操作系统完全隔离。它非常适用于软件质量保证及测试,另外还支持种类最广泛的客户端操作系统。

  完全虚拟化解决方案提供了其他独特功能。譬如说,它们可以对虚拟服务器拍“快照(snapshot)”,保留状态、有助于灾难恢复。这种虚拟服务器映像可以用来迅速配置新的服务器实例。越来越多的软件公司甚至开始提供评测版产品,作为可下载、预包装的虚拟服务器映像。因此,完全虚拟化的发展在很大程度上取决于处理器生产商比如AMD和intel在硬件辅助虚拟化方面的支持力度。这一点在x86架构上尤其如此。从体系结构上来说,X86平台本身并不是为支持多操作系统同时运行而设计的,这也就意味着虚拟化厂商被迫去克服硬件和软件两方面的限制,来分配和管理处理器、内存以及I/O资源。

  实际上,随着虚拟化技术的进一步普及,在x86架构领域,处理器主频的追逐已经不足以吸引太多的关注目光,新兴的虚拟化平台概念似乎更预示了核心处理器厂商的长远发展之计。不管是intel还是AMD都在部署新一代处理器中的虚拟化功能,希望能为有效的、基于hypervisor管理程序的x86系统虚拟化铺平道路,随之重点也转向了如何使得处理器更加可靠。

  处理器与硬件辅助虚拟化

  软件虚拟化主要的问题是性能和隔离性。完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机10%~30%的资源。而OS Virtualization可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由Hypervisor软件提供的,过多的隔离必然会导致性能的下降。

  这些问题主要跟x86设计时就没有考虑虚拟化有关。我们先来看看x86处理器的Privilege特权等级设计。

  x86处理器的Privilege特权等级设计

x86处理器的Privilege特权等级设计

  x86架构为了保护指令的运行,提供了指令的4个不同Privilege特权级别,术语称为Ring,从Ring 0~Ring 3。Ring 0的优先级最高,Ring 3最低。各个级别对可以运行的指令有所限制,例如,GDT,IDT,LDT,TSS等这些指令就只能运行于Privilege 0,也就是Ring 0。要注意Ring/Privilege级别和我们通常认知的进程在操作系统中的优先级并不同。

  操作系统必须要运行一些Privilege 0的特权指令,因此Ring 0是被用于运行操作系统内核,Ring 1和Ring 2是用于操作系统服务,Ring 3则是用于应用程序。然而实际上并没有必要用完4个不同的等级,一般的操作系统实现都仅仅使用了两个等级,即Ring 0和Ring 3,如图所示:

  

Ring 0和Ring 3

Ring 0和Ring 3

  也就是说,在一个常规的x86操作系统中,系统内核必须运

行于Ring 0,而VMM软件以及其管理下的Guest OS却不能运行于Ring 0——因为那样就无法对所有虚拟机进行有效的管理,就像以往的协同式多任务操作系统(如,Windows 3.1)无法保证系统的稳健运行一样。在没有处理器辅助的虚拟化情况下,挑战就是采用Ring 0之外的等级来运行VMM (Virtual Machine Monitor,虚拟机监视器)或Hypervisor,以及Guest OS。

  现在流行的解决方法是Ring Deprivileging(暂时译为特权等级下降),并具有两种选择:客户OS运行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。

  无论是哪一种模型,客户OS都无法运行于Privilege 0,这样,如GDT,IDT,LDT,TSS这些特权指令就必须通过模拟的方式来运行,这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。

  同时,这些特权指令是真正的“特权”,隔离不当可以严重威胁到其他客户OS,甚至主机OS。Ring Deprivileging技术使用IA32架构的Segment Limit(限制分段)和Paging(分页)来隔离VMM和Guest OS,不幸的是EM64T的64bit模式并不支持Segment Limit模式,要想运行64bit操作系统,就必须使用Paging模式。

  对于虚拟化而言,使用Paging模式的一个致命之处是它不区分Privileg 0/1/2模式,因此客户机运行于Privileg 3就成为了必然(0/3/3模型),这样Paging模式才可以将主机OS和客户OS隔离开来,然而在同一个Privileg模式下的不同应用程序(如,不同的虚拟机)是无法受到Privileg机构保护的,这就是目前IA32带来的隔离性问题,这个问题被称为Ring Compression。

  Intel VT和AMD Pacifica虚拟化技术都是为了能够很好解决以上问题才随之产生。

  Intel VT虚拟化技术

  Intel VT下面的VMM其实可以认为就是主机操作系统。

  

Intel VT下面的VMM

Intel VT下面的VMM

  作为一个芯片辅助(Chip-Assisted)的虚拟化技术,VT可以同时提升虚拟化效率和虚拟机的安全性,下面我们就来看看Intel VT带来了什么架构上的变迁。我们谈论的主要是IA32上的VT技术,一般称之为VT-x,而在Itanium平台上的VT技术,被称之为VT-i。

  VT-x将IA32的CU操作扩展为两个forms(窗体):VMX root operation(根虚拟化操作)和VMX non-root operation(非根虚拟化操作),VMX root operation设计来供给VMM/Hypervisor使用,其行为跟传统的IA32并无特别不同,而VMX non-root operation则是另一个处在VMM控制之下的IA32环境。所有的forms都能支持所有的四个Privileges levels,这样在VMX non-root operation环境下运行的虚拟机就能完全地利用Privilege 0等级。

  和一些文章认为的很不相同,VT同时为VMM和Guest OS提供了所有的Privilege运行等级,而不是只让它们分别占据一个等级:因为VMM和Guest OS运行于不同的两个forms。

  由此,GDT、IDT、LDT、TSS等这些指令就能正常地运行于虚拟机内部了,而在以往,这些特权指令需要模拟运行。而VMM也能从模拟运行特权指令当中解放出来,这样既能解决Ring Aliasing问题(软件运行的实际Ring与设计运行的Ring不相同带来的问题),又能解决Ring Compression问题,从而大大地提升运行效率。Ring Compression问题的解决,也就解决了64bit客户操作系统的运行问题。

  为了建立这种两个虚拟化窗体的架构,VT-x设计了一个Virtual-Machine Control Structure(VMCS,虚拟机控制结构)的数据结构,包括了Guest-State Area(客户状态区)和Host-State Area(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry和VM exit两种操作在虚拟机与VMM之间切换,用户可以通过在VMCS的VM-execution control fields里面指定在执行何种指令/发生何种事件的时候,VMX non-root operation环境下的虚拟机就执行VM exit,从而让VMM获得控制权,因此VT-x解决了虚拟机的隔离问题,又解决了性能问题。

  AMD Pacifica虚拟化技术

  作为对英特尔的虚拟机技术(Virtualisation Technology,简称VT)的回应,AMD也在2007年推出了自己的AMD64平台的虚拟技术。这项技术的代号为“Pacifica”,它将同时支持单核心与双核心处理器。利用这一技术,AMD的64位服务器、桌面型、移动型处理器都可采用多操作系统。去年秋季,AMD首次提到“Pacifica”技术,并表示这是为追赶英特尔而推出的。据悉,“Pacifica”将会通过直接连接架构(Direct Connect Architecture),在处理器和内存控制器中添加一个新模型和新功能来增强虚拟化体验。这种技术能够让多个操作系统和应用程序在配置同一处理器系统的独立分区中运行,把一台计算机系统变成多台“虚拟”的计算机系统。 这项设计也将进一步强化基于传统化软件的虚拟途径,并减少以往虚拟技术的复杂性,进一步提高安全性,提供向下兼容并保证IT投资。

  目前,若要在x86电脑上以独立的分区来执行多操作系统,还需要诸如VMware或微软Virtual Server等一类相当复杂的软件来建立软件虚拟机(VM)。另一种选择是目前在开放原码市场里逐渐兴起的“hypervisor(管理程序)”,如XenSource。这样会让处理器内的虚拟化更加容易。AMD表示,在Pacifica技术方面,AMD已经与Microsoft、VMware以及XenSource达成合作伙伴关系。而且,从AMD目前对Pacifica技术的展示来看,其独特的直联架构确实也使虚拟化更加有效。

  

为您推荐

加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多

服务器论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品