全面分析微软虚拟化技术Hyper-V毫无疑问,在业界,微软Microsoft是当之无愧的软件霸主,不仅仅在操作系统上占据巨大的市场份额,更在数据库、迁入式移动计算、搜索引擎等各个方面都具有很强的影响力,在各个领域都不容忽视。
由于低估微软在产品创新和销售执行方面的能力,众多的企业在与微软的竞争中遭遇挫折。
微软进入虚拟化领域已经很有一段时间了(微软在2003年收购了推出了Virtual PC 软件的Connectix公司,并在其后推出了Virtual Server服务器虚拟化软件),在Hpyer-V推出之前,微软在虚拟化领域尤其是服务器虚拟化领域可说是略显不自信,与竞争对手VMware的频频新品相比,Virtual PC和Virtual Server的发布和宣传都十分低调,毕竟,VMware/Xen等产品凭借出色的性能已经占据了大半江山。
而现在,随着Hyper-V的正式推出,企业级虚拟化领域极可能会引起一场风暴,市场格局有可能迅速改变。
为什么微软的Hyper-V会具有这样的能力呢?注:什么是虚拟化?Hyper-V是一个Hypervisor(系统管理程序),开发代号为Viridian,它主要作用就是管理、调度虚拟机的创建和运行,并提供硬件资源的虚拟化。
Hyper-V是微软伴随Windows Server 2008最新推出的服务器虚拟化解决方案,在Windows Server 2008发布的时候,集成了一个Beta版本的Hyper-V,微软承诺在180天之内会提供正式版的Hyper-V。
Window Server 2008是4月份发布的,180天就是不到6个月,因此微软会在9月到10月之间发布正式版的Hyper-V,而目前已经到了RTM阶段,可以正常使用了。
Hyper-V跟微软自家的Virtual PC、Virtual Server等产品相比,有着很显著的区别,和竞争对手VMware Server/ESX Server也有很大不同:Hyper-V在构架上绝对是一个突破性的进展!Hyper-V虚拟化细节架构微软发布的架构图资料有很多,然而主要内容都很相似,就是上图那样。
Hyper-V之前、Virtual Server 2005 R2的架构Hyper-V的本质是一个VMM(虚拟化管理程序),和微软之前的Virtual Server系列产品,处在的层次不同,它更接近于硬件,这一点比较像VMware的ESX Server 系列,实际上Hyper-V属于微软的第一个裸金属虚拟化产品(Bare-Metal Virtualization)。
然而,在一些基础架构上,Hyper-V和ESX Server又有着明显的不同,所以说,Hyper-V是很特别的,且看下页分解。
作为一个虚拟化产品,Hyper-V具有一个很特别的要求:处理器必须支持AMD-V或者Intel VT技术,也就是说,处理器必须具备硬件辅助虚拟化技术。
对于一个虚拟化产品来说,要求一个硬件特性是比较奇特的事情(要求支持一个指令集不算),微软之前的Virtual Server 2005R2不需要这个特性。
对于VMware的产品来说,这也只是一个可选的特性,不像Hyper-V那样,是一个硬性的要求。
处理器不支持VT/AMD-V,就无法运行Hyper-V。
VT-x处理器辅助虚拟化技术,是Hyper-V的硬性要求关于VT的具体作用,可以查看x86虚拟化难题解决:Intel VT或者《从VT-x到VT-d Intel虚拟化技术发展蓝图》。
VT,或者AMD-V,是一种硬件辅助虚拟化技术,用来解决Ring Privilege的问题,传统处理器下虚拟机通过使用指令转换的方法来在Ring 3执行Ring 0特权指令,严重影响性能,而VT则解决了这个问题。
对VT的依赖和支持是Hyper-V架构的基础,也是Hyper-V最大的特点。
也因为Hyper-V需要处理器支持硬件虚拟化辅助,一部分处理器无法应用Hyper-V,只有较新、非Value型的处理器才能应用。
例如访问只有75%的几率碰到部署在Hyper-V上的虚拟化服务器,剩下的25%都是未Hyper-V虚拟化的服务器。
要在这些服务器上应用虚拟化,用户只能选择Virtual Server 2005 R2,或者其它公司的产品。
Microsoft Hyper-V和VMware ESX Server是比较相像的,都是Bare-Metal类型,但是它们的内核架构也有着明显的不同。
微软在谈到竞争对手ESX Server时,总会提到,Hyper-V是微内核架构的,而ESX Server是单内核架构,Hyper-V要更好。
这两者具有什么不同?到底谁更好呢?单内核(分层的内核)与微内核单内核和微内核实际上是操作系统内核术语,操作系统的内核——实现核心功能的那部分——可能是微内核(Micro kernel),也可能是单内核(Monolithic kernel,有时也叫宏内核Macro kernel)。
按照类似封装的形式,这些术语定义如下:微内核(Micro kernel)――在微内核中,最常用的功能被精心挑选设计在内核模式(或者按照上一页的说法,在x86上是Ring 0权限下)运行的一个进程上,而其它大部分不怎么重要的核心功能都作为单独的进程运行在用户模式下(类似地,Ring 3权限下)运行,它们通过消息传递进行通讯(例如,Windows采用的进程间通信IPC 机制,IPC就是Inter Process Communication)。
最基本的思想就是要尽量地小。
通常微内核只包含了进程调度、内存管理和进程间通信这几个根本的功能。
这种设计具有许多好处,例如增加了灵活性,易于维护,易于移植。
微内核的模块化设计让其他核心功能模块都只依赖于微内核模块或其他模块,并不直接依赖硬件。
要添加新的特性只需要另行编写用户模式的微内核服务器。
而只需把微内核本身进行移植就能够完成将整个内核移植到新的平台上。
由于模块化的设计,不包含在微内核内的驱动程序可以动态地加载,或者卸载。
同时,微内核也不依赖于固定的文件系统,用户可以随意选择对文件系统的支持。
用户甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统。
不需要的模块将不会被加载到内存中,因此微内核就能够更有效的利用内存。
微内核还具有的好处是实时性、安全性比较好,并且更适合于构建分布式操作系统和面向对象操作系统。
微内核操作系统的典型例子是,Mach(一个非原生的分布式操作系统内核,被众多操作系统采用,例如,被应用在Mac OS X上)、IBM AIX、BeOS,以及Windows NT(Windows Server 2003和Windows Server 2008都包含其内),还有著名的Minix (一个主要用于教学的Unix系统)和Amoeba(一个真正原生的分布式操作系统)。
单内核(Monolithic kernel)――单内核是个很大的进程。
它的内部又能够被分为若干模块(或层次,或其他),但是在运行的时候,它是一个单独的大型二进制映象。
因为是在同一个进程内,其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是微内核那样在多个进程之间进行消息传递。
因此在运行效率上,单内核会具有一定的好处。
单内核操作系统的典型例子是,大部分Linux,包括BSD在内的几乎所有的Unix,MS-DOS,Windows 9x。
例如Sun Solaris的内核就运行着数百个线程以实现各种功能,而编译过Linux内核的人就知道Linux内核有数十MB之巨。
单内核和微内核哪个更好显然是一个很有争议性的问题,必须说明的很有趣的一点是,这种争论经常会令人想到上一个时代CPU领域中RISC和CISC的斗争。
现代的成功CPU设计中都包含了任何的这两种技术,就像现在Linux(单内核)和Windows NT(微内核)实际上都是微内核和单内核的混合产物一样,只是或多或少的问题而已。
历史上有过这样的争论,Linux(单内核)的作者Linus和Minix/Amoeba (均为微内核)的作者Andrew S. Tanenbaum教授在讨论组上论战,并卷入了大量的爱好者。
最终Linus也同意Tanenbaum微内核架构更为先进的论点。
掉书袋就到这里,回到Hyper-V上来,通过采用微内核架构,Hyper-V在体积上很有优势,它的大小只有300k左右(似乎新版本的更加小),而VMware ESX Server 的Linux核心则非常大。
就VMM虚拟化管理程序来说,需要的功能不多,因此采用微内核架构是很合适的,运行效率可以很高。
不过就理论上来说,合理配置的单内核其实和微内核也很相似。
哪一种性能更好?这要在测试之后才能知晓了,不过在这之前,我们接下来可以先看看微内核带来的一个好处:设备驱动程序的变迁。
注:分布式操作系统(Distributed Operation Systems)分布式操作系统DOS(可不是Disk Operation System)的具有多个定义,是是管理分布式系统的资源的操作系统。
这样的说法比较抽象,我们可以通过与网络操作系统(例如,我们使用的Windows)对比来简单阐述分布式操作系统的特点:(1)分布性。
分布式操作系统的处理和控制功能均为分布式的;网络操作系统其控制功能却是集中在某个或某些主机或网络服务器中,即集中式控制方式。
(2)并行性。
分布式操作系统具有任务分配功能,可将多个任务分配到多个处理单元上,使这些任务并行执行,从而加速了任务的执行;而网络操作系统通常无任务分配功能,网络中每个用户的一个或多个任务通常都在本地计算机上处理。
(3)透明性。
分布式操作系统通常能很好地隐藏系统内部的实现细节。
包括对象的物理位置、并发控制和系统故障等对用户都是透明的。
例如,当用户要访问某个文件时,只需提供文件名而无须知道(所要访问的对象)它是驻留在那个站点上,即可对它进行访问,亦即具有物理位置的透明性。
此外,当分布式操作系统运行一个程序时,该程序无需经过特别设计以及经过用户特别设置,就可以自动划分到多个处理器上并行运行。
(4)共享性。
分布式操作系统支持系统中所有用户对分布在各个站点上的软硬件资源的共享和透明方式访问。
而网络操作系统所提供的资源共享功能仅局限于主机或网络服务器中资源,对于其它机器上的资源通常仅有使用该机的用户独占。
(5)健壮性。
分布式操作系统由于处理器和控制功能的分布性而具有较好的可用性和可靠性,即健壮性,只有所有的处理节点损坏,一个分布式操作系统才算是崩溃了。
典型的分布式系统包括了SETI@Hom这样的项目,Cluster、集群、云计算,也属于分布式操作系统的范畴。