一个执着于技术的公众号
虚拟化技术简介
虚拟化技术发展史
虚拟化技术最早出现在大型机时代。上世纪60年代,IBM开始在其CP-40大型机系统中尝试虚拟化的实现,后来在System/360-67中采用,并衍生出VM/CMS到后来的z/VM等产品线。大型机上的虚拟化技术在之后20多年的发展中愈发成熟,但随着小型机以及x86的流行,大型机在新兴的服务器市场中已经失去了影响力。
由于处理器架构的不同,在大型机上已经成熟的虚拟化技术却并不能为小型机及x86所用。直到2001年,VMware发布了第一个针对x86服务器的虚拟化产品。之后的几年间,英国剑桥大学的一位讲师发布了同样针对x86虚拟化的开源虚拟化项目Xen,并成立XenSource公司(07年Citrix将其收购);惠普发布了针对HP-UX的Integrity虚拟机;Sun跟Solaris 10一同发布了同时支持x86/x64和SPARC架构的Solaris Zone;而微软也终于在2008年发布的Windows Server 2008 R2中加入了Hyper-V。期间,VMware被EMC收购,XenSource则被思杰收购。
之后的几年间,VMware逐渐在企业级市场中被广泛的接受,Xen也逐渐在互联网领域展露头角。在成熟的服务器操作系统当中,Novell SUSE Linux Enterprise 10是第一个采用Xen技术的。当时的Xen还很不成熟,乃至于红帽还为此取笑了Novell一番;不过几个月后,到了RHEL 5.0发布的时候,红帽决定也将Xen加入到自己的默认特性当中——那是2006年。一时之间,在Linux服务器领域,Xen似乎成为了 VMware之外的最佳虚拟化选择(事实上也没多少其他可选的)。
但是,作为一项Linux平台上的虚拟化技术,Xen在很长一段时间内一直没有被接受到Linux内核的代码当中,这对于Xen的维护者而言,不仅意味着要多做很多工作,还意味着用户在废了半天劲装好Xen之后可能遇到意想不到的问题(注:2011年6月发布的Linux内核3.0中已经加入了对Xen的支持——Xen的工程师们表示这是清理了7年遗留代码、提交了600多个补丁的成果)。
而红帽方面,也许是因为当时对这种脱离内核的维护方式很不爽,也许是因为采用Xen的RHEL在企业级虚拟化方面没有赢得太多的市场,也许是因为思杰跟微软走的太近了,种种原因,导致其萌生了放弃Xen的心思。2008年9月,红帽收购了一家名叫Qumranet的以色列小公司,由此入手了一个叫做KVM的虚拟化技术(KVM,全称Kernel-based Virtual Machine,意为基于内核的虚拟机)。
总之红帽决定选择了一个新兴的基于内核的虚拟化技术:KVM。而在正式采用KVM一年后,就宣布在新的产品线中彻底放弃Xen,集中资源和精力进行KVM的工作。至此各大虚拟化技术VMware,Xen,KVM等均出现,并找到自己位置。
全虚拟化(Full Virtualization)
全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调Guest操作系统和原始硬件,VMM在Guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。
全虚拟化主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS、VirtualBox、KVM、VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)。
全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。
· 优点:Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简单,不论是 VMware 的产品,还是Oracle的 VirtualBox。
· 缺点:基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。
未来:因为使用这种模式,不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,在未来全虚拟化还是主流。
半虚拟化(Para Virtualization)
半虚拟化是另一种类似于全虚拟化技术,它使用Hypervisor分享存取底层硬件,但是它的Guest操作系统集成了虚拟化方面代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。
它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。
(半虚拟化由于需要修改VM操作系统的内核,所以没法支持windows这样闭源OS,于是后来Xen也利用CPU虚拟化技术开始支持全虚拟化了,所以目前Xen支持半虚拟化和全虚拟化两种)
半虚拟化需要Guest操作系统做一些修改,使Guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
· 优点:这种模式和全虚拟化相比架构更精简,而且在整体速度上有一定的优势。
· 缺点:需要对Guest OS进行修改,所以在用户体验方面比较麻烦。
未来:情况比较类似,在公有云(比如Amazon EC2)平台上应该继续占有一席之地,但是很难在其他方面和类似VMware vSphere这样的全虚拟化产品竞争,同时它也将会利用其它技术来提高速度,并简化架构。
虚拟化厂商
VMware简介
· VMware的历史
早在1998年时,毕业于MIT的Diane Greene察觉到计算机资源的使用率过低,因此和Dr. Mendel Rosenblum、Scott Devine、Dr. Edward Wang以及Edouard Bugnion等人成立了VMware公司,专精于OS in OS的软件,期待能完全发挥硬件的性能,并为当时的专业IT人员提供一个测试、评估的低成本环境。
1.X86平台上的第一个虚拟机产品:VMware Workstation
当时VMware Workstation一上市就打响,使得VMware直接成为虚拟机的代名词。然而Windows系统的相对不稳定性,让VMware的工程师们把目光投向了相对较稳定的Linux系统,因此在VMware Workstation成功推出不久之后,也出现了Linux版本的产品,让Linux下的用户也可以同时运行Windows或其他的Linux套件。
2.Linux下的虚拟机产品
虽然解决了Windows的问题,VMware Workstation仍然无法摆脱寄居在固定操作系统上的恐惧。既然选择了较为稳定的Linux,VMware也顺势推出了运行在RedHat、Mandrake和SUSE Linux下的VMware GSX Server,并且也拥有Web端的管理和客户端的管理程序。在Linux下,VMware较不需要担心病毒或黑客的攻击,而操作系统本身宕机带来的危险性也相对较小,因此在2000年初期,Linux成为VMware产品充分发挥的最好舞台。而VMware也在2000年的初期在Linux下推出了VMware GSX Server产品,这也是后来推出VMware Server版的基础。当然在GSX Server上最大的特色,就是使用了Client/Server架构的管理界面,更可以使用浏览器来连入GSX Server来管理。
KVM
KVM Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。06年之前,Linux内核中还没有任何虚拟化实现,Xen和Vmware依靠自己独有的技术分别在虚拟化不同领域如日中天,尤其值得一提的是,Xen在开源领域几乎成为了虚拟化的事实标准。Avi Kivity和他所在的以色列初创公司Qumranet提出并推动KVM(基于Linux内核的全虚拟化方案),以其精简的架构,清晰的定位很快获得Linux社区多数开发人员的支持得以快速被合并进入主干,以Avi Kivity为主的工程师仅仅花了不到一年时间就让Linux社区接受KVM的设计方案并且通过了代码Review,最终于2006年10月合并进入2.6.20主干,时至今日,人们依然对于KVM合并进入Linux主干的速度之快感到不可思议。
为什么那么多的大公司对KVM感兴趣?其中最明显并且最重要的因素就是KVM是Linux内核的一部分。这个轻量级的虚拟化管理程序模块能直接与硬件交互,不需要修改虚拟化操作系统,因此性能更好,并且补丁包能够和Linux内核兼容,轻松控制虚拟化进程,同时减轻管理负担。
当然,KVM也有成长的烦恼。KVM究竟属于Type 1还是Type 2hypervisor呢?出现这种疑惑的原因在于KVM的基因——它属于操作系统的一部分,类似直接运行于硬件系统之上的裸机管理程序,不需要修改操作系统。这就符合Type 1 hypervisor的定义,也经常被称为硬件虚拟化引擎,更像是个安装在客户端上的操作系统,性能佳,运行稳定,减少了运行管理程序本身所需的花销。
而Type 2 hypervisor更像是个应用,运行在基础操作系统上。如果将KVM看作Type 2,那么所强调的高性能难达到,还可能存在安全风险。其实,对Type 1和Type 2的讨论不是是否采纳KVM的前提。无论KVM是“第一类”还是“第二类”,这都是语义上的概念。
此外,就是所有新生技术在发展中都会面临的难题:技术不成熟。KVM的出现不过三四年时间,在可用资源、平台支持、管理工具、实施经验方面当然不能与出现八年之久的Xen相比。虽然目前KVM还缺少某些关键特性,例如存储的动态迁移,但是在后续的版本中都会开发出来。
性能方面,KVM在逐渐显示其威力。不久前的SPECvirt虚拟化对照基准测试中,红帽企业Linux 6.1、其内嵌的KVM hypervisor以及惠普ProLiant DL980 G7服务器三者结合,创造了新的成绩——最佳的虚拟化性能和最多的计算区块数量,并且六台虚拟机能同时运行一个应用程序。
虽然只是新生技术,但是由于其性能和实施的简易性,加上Linux企业市场中份额最大的红帽不遗余力的推广开发,KVM将会持续成长壮大。
Hyper-V
在2006年VMware将其Server产品免费化之后,整个虚拟机的市场立即产生了变化。原来大家心中的"OS in OS"观念立即提升到新的境界。微软是第一个发现这个庞大市场的竞争对手,也在当时立即宣称投入企业级的虚拟机市场,并在2008年成功推出了Hyper-V。在2010年发布的Windows Server 2008 R2发布支持Live/Quick Migration的Hyper-V R2更新版,支持不需要重新启动的立即转移,
Hyper-V并不是一个独立的产品,而是很适当地融入了Windows Server 2008系统中的"角色(Role)"。在Windows Server 2008中要安装Hyper-V,必须以角色的方式将主机配置成虚拟机角色。这一点也让初次接触虚拟机的人直接怀疑Hyper-V原生是否真的是原生架构。既然需要一个Windows Server 2008当做宿主的操作系统,Hyper-V原生怎么会是原生架构的呢?
1. Windows Server 2008是第一个虚拟机
原生架构的最重要特色反而不是宿主的OS,而是Hypervisor的位置。如果Hypervisor的位置是在Ring 0或是Ring 1,只要能掌控其上的客户端OS,并且为客户端OS提供监控和分配的服务,那么运行了Hyper-V的Windows Server 2008本身,是可以被视为一个客户端OS的。
在启动Hyper-V之前,Windows Server 2008就是一个普通的Windows Server操作系统。整个操作系统掌握了所有的资源,所有的硬件都被操作系统直接访问。此时,计算机是没有虚拟机功能的,安装Virtual Server/PC或是VMware Workstation/Server均可以顺利运行。
2.特殊的原生角色
然而启动了Hyper-V的角色之后,系统的本质即发生变化。首先在开机时,会载入hvboot.sys文件,这就是Hyper-V的Hypervisor;载入hvboot.sys之后,以后加载的操作系统都被视为虚拟机,包括已经安装好的Windows Server 2008。
此时Windows Server 2008会继续启动,但已经变成了一个虚拟机了。在Hyper-V中,将启动Hyper-V后的Windows Server 2008称为"父虚拟分区(Parent partition)",算是一个最特殊的虚拟机。"父虚拟分区"这个虚拟机和其他之后安装的虚拟机完全不同,其完全掌握着所有的资源,但CPU和网卡除外,因此这个Windows Server 2008也必须听从Hypervisor的指挥。
往期精彩
◆ LVM逻辑卷学习
我知道爱学习的你“在看”