目录
虚拟化技术简介
虚拟化技术发展史
VMware简介
KVM
Hyper-V
虚拟化技术简介
虚拟化技术发展史
虚拟化技术最早出现在大型机时代。上世纪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(虚拟机管理程序)来捕获处理。
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的指挥。
(转载与:开源Linux)