虚拟化的一些基本常识
本文从以下几个方面介绍虚拟化的一些常识:
虚拟化层次的分类及举例;
系统虚拟化简史;
VMM分类;
典型的虚拟化产品;
Xen。
虚拟化层次分类及举例
指令级虚拟化
Bochs
QEMU
硬件级虚拟化
VMware
Xen
KVM
操作系统级虚拟化
Linux-VServer
OpenVZ
编程语言级虚拟化
JVM
.NETCLI
程序级虚拟化
Wine
系统虚拟化简史(硬件级虚拟化)
历史上第一个虚拟机是1965年左右IBM公司开发的system/360 model 40 VM。其最初的设计目的是将当时最先进的虚拟内存的概念延展到计算机的其他子系统,搭建一个时分共享的系统,运行多个单用户的操作系统,以实现多个用户对 昂贵的物理计算机资源的共享。
之后,随着时分多用户操作系统的发展,虚拟化技术真正成熟是在15年后的IBM VM/370系统中。作为一个标志性的系统,VM/370的许多原理至今还在IBM的z系统大型机上使用。VM/370运行在IBM System/370大型机上,并虚拟出同体系结构的System/370虚拟机。由于System/370硬件的优秀设计,对VM/370的实现提供了 完整而高效的支持,以VM/370为代表的虚拟机和系统虚拟化技术完整实现了虚拟机的思想。
VM/370上实现的是完全虚拟化(Full Virtualization),他所抽象的虚拟计算机具有完全的物理计算机特性。
在同一个时代,IBM M44/44x系统中,出现了半虚拟化(partial-virtualization)(某些书中将para virtualization称为半虚拟化,他们不是一个概念),半虚拟化(partial-virtualization)提供了对底层硬件的部分模 拟,以满足某些专门的软件的执行环境,但是不能运行所有可能运行在物理机上的软件。
伴随着硬件的发展,从20世纪90年代后期开始,台式计算机的性能逐渐达到支持多个系统同时运行的水平。在大型机上沉寂一时的虚拟化技术,在小型机 和微型机领域开始迅速升温。1997年,在斯坦福大学开发的Disco系统中探索了在共享内存的大规模多处理器系统上运行普通的桌面操作系统。基于 Disco系统的研究经验,Disco开发者们继续进行了个人计算机虚拟化技术的研究,之后就有了1998年的Vmware公司的诞生。
在个人计算机领域广泛使用x86体系结构的先天设计,存在对系统虚拟化的支持缺陷或虚拟化漏洞(virtualization hole)。 在x86体系结构上的虚拟化技术,都需要用软件的方法来弥补系统结构设计上的不足。例如,采用代码扫描或修补方法(Scan and patch)或二进制代码翻译(binary translation)技术来实现基于软件的完全虚拟化,但这样做势必带来性能上的损失及非常大的软件复杂度。
这种情况下,学术界提出了另一种思路来客服体系结构上的缺陷,叫类虚拟化技术(Para virtualization)(一些书上称半虚拟化)。其主要思想是通过客户机操作系统与虚拟化管理层的协同设计,由虚拟化管理层软件提供一个近似于原 物理系统,但又不完全相同(与原系统)的虚拟平台,以避免虚拟化漏洞和实现更高的虚拟化效率。虚拟化技术需要修改操作系统的源代码来与下层的虚拟化管理层 软件协同工作,从而避免体系结构上的缺陷。
美国华盛顿大学的Denali项目和原子英国剑桥大学的Xen项目都支持类虚拟化。
虽然上诉两种基于软件的方法都能够实现系统虚拟化,但他们各自存在不可回避的问题。基于软件的完全虚拟化方法不可避免的导致性能的下降,同时伴随着一些兼容性上的损失(这里的兼容性是指?);而修改操作系统的方法对于现有系统的移植和伴随着内核升级的维护提出了要求 ,并且对于非开源的操作系统也有局限性。
从根本上解决系统结构上的缺陷,最好的方法是从体系结构本身入手。intel和AMD在2006年后都逐步推出了带有硬件虚拟化支持的处理器,从根 本上保证了x86架构是一个可虚拟化的架构。VMM软件可以利用这些硬件虚拟化技术,实现基于硬件的全虚拟化,这样操作系统不需要做任何修改就可以运行在 虚拟机上。
除了x86处理器架构加入了硬件虚拟化支持,IBM power 2001年,Sun SPARC 2005年也在处理器中加入了虚拟化的支持。但IBM和Sun都采用了基于硬件的类虚拟化策略,除了在硬件中加入了对虚拟化的支持,还在固件层加入了相应 的类虚拟化VMM层,上层的操作系统 需要根据 VMM层接口进行修改。提供了从处理器到固件层到操作系统层对虚拟化的全面协同支持。
今天的大部分服务器和台式机处理器都已经有了对虚拟化的支持,但只是解决了处理器层如何更好的支持虚拟化的问题,为了使虚拟化解决方案更加高效,计 算机系统各个层次都在逐渐加入对虚拟化的硬件支持,逐渐形成一个对虚拟化更好支持的虚拟化生态系统。以intel为例,除了处理器中的vt技术外,芯片中 开始提供针对I/O虚拟化功能的vt-d技术,网卡中也开始提供更好的网络虚拟化支持的多队列的VMDq技术。与此同时PCI标准组织也在积极的指定在 PCI设备级对虚拟化进行支持的单根PCI桥IOV和多跟PCI桥IOV标准。
从20世纪90年代发展至今,虚拟化软件取得了长足的发展。非常多的虚拟机软件涌现除了,如KVM、virtualbox、微软的virtual pc 、hyper-v、Sun的xVm、Oracle的Oracle VM。
VMM分类(硬件级虚拟化)
按虚拟平台分类
根据VMM所根据的虚拟平台类型可以将VMM分成两类:
第一类VMM虚拟的是现实存在的平台,并且在客户机操作系统看来,虚拟的平台和现实的平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上。这样的虚拟平台可以运行现有的操作系统,无须对操作系统进行任何修改,因此这种方式被称为完全虚拟化(full virtualization)。完全虚拟化有软件辅助的完全虚拟化和硬件辅助的完全虚拟化。
第二类VMM虚拟的平台是现实中不存在的,而是经过VMM重新定义的,这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境,因此客户机操作系统知道其运行在虚拟平台上,并且会去主动适应。这种方式被称为类虚拟化(para virtualization)。另外,一个VMM可以既提供完全虚拟化的虚拟平台,又提供类虚拟化的虚拟平台。
按VMM实现结构分类
Hypervisor模型
在Hypervisor模型中,VMM可以看作是一个完备的操作系统,不过和传统操作系统不同的是,VMM是为虚拟化而设计的,具备虚拟化功能。
在Hypervisor模型中,VMM同时具体物理资源的管理功能和虚拟化功能,因此,物理资源的虚拟化的效率会高一些,同时他不依赖于其他操作系统,虚拟机的安全只与VMM安全有关,不像宿主型的VMM,虚拟机的安全与VMM和操作系统相关。
同样由于Hypervisor模型中,VMM完全拥有物理资源,因此需要对物理资源进行管理,包括设备驱动,这些开发的工作量是很大的。
宿主模型
物理资源由宿主机操作系统管理,宿主机操作系统是传统操作系统,VMM通过调用宿主机操作系统的服务来获得资源提供虚拟化服务。VMM创建出虚拟机之后,通常将虚拟机作为宿主机操作系统的一个进程参与调度。
宿主模型最大的优点是可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化。宿主模型也可以利用宿主机操作系统的调度、电源管理灯其他功能。
由于宿主操作系统设计开发之初并没有考虑虚拟化的支持,因此VMM虚拟化的效率和功能会受到一定影响。另外虚拟机的安全会依赖于VMM和宿主机操作系统的安全。
混合模型
混合模型是上述两种模式的汇合体,VMM仍然位于最底层,用于所有物理资源。但与Hypervisor模型不同的时,VMM不会控制大部分I/O设 备,会有一个运行在特权虚拟机中的特权操作系统控制大部分硬件,分担VMM的一些职责。处理器和内存的虚拟化由VMM完成,I/O的虚拟化则由VMM和特 权操作系统共同合作来完成。
典型的虚拟化产品
VMware ESX Server 3
基于Hypervisor模型,直接运行在物理硬件上,无须操作系统,是一款面向企业级应用的产品。既支持完全虚拟化也支持类虚拟化,新版本中也开始采用了硬件虚拟化技术。
VMware Server
宿主模型,面向服务端入门级产品,宿主操作系统可以是windows或者linux。由于采用宿主模型,VMware Server支持的硬件种类要比ESX Server多,此外VMware Server是免费的。
VMware Workstation
也是宿主模型,是VMware面向桌面的主打产品。宿主操作系统可以是windows或者linux。VMware Workstation支持完全虚拟化。与VMware Server不同,VMware workstation专门针对桌面应用做了优化。
VMware Fusion
宿主模型,与VMware Workstation基本相同,VMware Workstation运行在Windows和Linux上,VMware Fusion运行在基于Intel Mac硬件平台的Mac OS X。
Virtual PC
Miscrosoft 面向桌面的虚拟化产品,宿主模型,宿主操作系统是Windows,早期采用软件虚拟化方式,基于Binary Translation技术。新版本中已经支持硬件虚拟化技术。
Virtual Server
Miscrosoft 面向服务器的入门级虚拟化产品,也是宿主模型,宿主操作系统可以是Windows XP和Windows Server 2003等。新版本中也开始支持硬件虚拟化技术。
Windows Server 2008
2008是Miscrosoft 推出的新一代服务器操作系统,其中一项重要的新功能是虚拟化。Server 2008的虚拟化架构采用混合模型, 其重要的部件之一Hyper-V作为Hypervisor运行中最底层,Server 2008本身作为特权操作系统运行在Hyper-V之上。Server 2008采用硬件虚拟化技术,必须运行在支持Intel VT技术或者AMD-V技术的处理器上。Server2008的虚拟化功能是纯64位,只运行在Server 2008 64位版本中。客户机操作系统支持32位和64位,支持 对称多处理器的客户机操作系统等。
Xen
从技术角度来说,Xen基于混合模型。特权操作系统(Domain0)可以是Linux、Sorlaris以及NetBSD。Xen 1.0 2.0实现了类虚拟化,3.0支持基于硬件技术的完全虚拟化。
KVM
KVM采用的是基于Intel VT技术的硬件虚拟化方法。从架构上看,可以认为KVM是宿主模型,Linux是宿主操作系统。但随着越来越多的虚拟化功能被加入到Linux中,也有人认为Linux已经是一个Hypervisor,因此KVM是Hypervisor 模型。KVM和Linux内核结合的非常好,但KVM还处在发展阶段。
Xen
Xen是一个虚拟化平台,它来之于一项学术研究成果,现已发展成一个重要的开源项目。
Xen的独特之处在于,当它第一次发布时,使用了半虚拟化(para virtualization)来运行像linux这样的常规操作系统。半虚拟化需要修改运行在Xen之上的操作系统,既提升了性能又简化了Xen本身。
一般来说,操作系统内核是运行在计算机上的最有特权的软件,但在虚拟化的情况下,系统管理程序是最有特权的,操作系统内核是在相对较低的权限下运 行。如果操作系统现在试图执行一些特权指令,那他们会失败,失败的方式是至关重要的。如果他们引起系统管理程序会捕获的一个错误,系统管理程序可以恰当的 模拟这个指令并继续控制虚拟机。然后x86上存在一些默默失败而不触发系统管理程序的指令。对于虚拟化来说这是坏消息,因为这妨碍了操作系统在虚拟机上适 当的工作。普遍的技术(至少在Xen之前)是在运行时扫描操作系统代码,寻找特定的指令并用直接调用系统管理程序的代码替换他们(什么技术?怎么实 现?)。虽然这具有理想的兼容性,但在性能上有很大的开销。
当发布Xen时,它表明,通过放弃理想的兼容性,性能会显著的提高。
半虚拟化的观点是移除一个架构(如x86)中难以虚拟化或如果进行虚拟化开销很大的所有特性,用于虚拟化层直接通信的半虚拟化操作替换他们。
一个操作系统的半虚拟化就是重写与半虚拟化架构不兼容的所有代码。对linux内核,Xen只修改或增加2995行代码,就可以使它能在Xen上运行。
Xen是原生式虚拟化的一个例 子。另一种方式是宿主操作系统上运行一个系统管理程序。这种情况下,每个虚拟机实际上成了宿主操作系统的一个进程。宿主式系统管理程序通常用于工作站的虚 拟化产品中,例如vmware。这种方式的主要优点在于:安装一个宿主式的系统管理程序就像安装一个新应用程序一样简单,反之,安装一个原生的系统管理程 序(如Xen)就像安装一个新的操作系统。因此宿主式虚拟化更适合非专业的用户。
另一方面,原生式的系统管理程序的优点在于它可以获得更好的性能。宿主式虚拟机更容易用于桌面虚拟化。
Xen3.0版本开始支持基于intel vt和amd v硬件技术的全虚拟化。
原文链接:http://itblogs.ga/blog/20141217203759/