毫无疑问在业界微软Microsoft是当之无愧的软件霸主不仅仅在操作系统上占据巨大的市场份额更在数据库迁入式移动计算搜索引擎等各个方面都具有很强的影响力在各个领域都不容忽视由于低估微软在产品创新和销售执行方面的能力众多的企业在与微软的竞争中遭遇挫折 Virtualization and Consolidation with HyperV 微软进入虚拟化领域已经很有一段时间了(微软在年收购了推出了Virtual PC软件的Connectix公司并在其后推出了Virtual Server服务器虚拟化软件)在HpyerV推出之前微软在虚拟化领域尤其是服务器虚拟化领域可说是略显不自信与竞争对手VMware的频频新品相比Virtual PC和Virtual Server的发布和宣传都十分低调毕竟VMware/Xen等产品凭借出色的性能已经占据了大半江山而现在随着HyperV的正式推出企业级虚拟化领域极可能会引起一场风暴市场格局有可能迅速改变 为什么微软的HyperV会具有这样的能力呢? 注什么是虚拟化? HyperV是一个Hypervisor(系统管理程序)开发代号为Viridian它主要作用就是管理调度虚拟机的创建和运行并提供硬件资源的虚拟化HyperV是微软伴随Windows Server 最新推出的服务器虚拟化解决方案在Windows Server 发布的时候集成了一个Beta版本的HyperV微软承诺在天之内会提供正式版的HyperVWindow Server 是月份发布的天就是不到个月因此微软会在月到月之间发布正式版的HyperV而目前已经到了RTM阶段可以正常使用了 HyperV跟微软自家的Virtual PCVirtual Server等产品相比有着很显着的区别和竞争对手VMware Server/ESX Server也有很大不同HyperV在构架上绝对是一个突破性的进展! HyperV虚拟化细节架构 微软发布的架构图资料有很多然而主要内容都很相似就是上图那样 HyperV之前Virtual Server R的架构 HyperV的本质是一个VMM(虚拟化管理程序)和微软之前的Virtual Server系列产品处在的层次不同它更接近于硬件这一点比较像VMware的ESX Server系列实际上HyperV属于微软的第一个裸金属虚拟化产品(BareMetal Virtualization)然而在一些基础架构上HyperV和ESX Server又有着明显的不同所以说HyperV是很特别的 作为一个虚拟化产品HyperV具有一个很特别的要求处理器必须支持AMDV或者Intel VT技术也就是说处理器必须具备硬件辅助虚拟化技术 对于一个虚拟化产品来说要求一个硬件特性是比较奇特的事情(要求支持一个指令集不算)微软之前的Virtual Server R不需要这个特性对于VMware的产品来说这也只是一个可选的特性不像HyperV那样是一个硬性的要求处理器不支持VT/AMDV就无法运行HyperV VTx处理器辅助虚拟化技术是HyperV的硬性要求 关于VT的具体作用可以查看x虚拟化难题解决Intel VT或者《从VTx到VTd Intel虚拟化技术发展蓝图》VT或者AMDV是一种硬件辅助虚拟化技术用来解决Ring Privilege的问题传统处理器下虚拟机通过使用指令转换的方法来在Ring 执行Ring 特权指令严重影响性能而VT则解决了这个问题对VT的依赖和支持是HyperV架构的基础也是HyperV最大的特点 也因为HyperV需要处理器支持硬件虚拟化辅助一部分处理器无法应用HyperV只有较新非Value型的处理器才能应用例如访问只有%的几率碰到部署在HyperV上的虚拟化服务器剩下的%都是未HyperV虚拟化的服务器要在这些服务器上应用虚拟化用户只能选择Virtual Server R或者其它公司的产品 Microsoft HyperV和VMware ESX Server是比较相像的都是BareMetal类型但是它们的内核架构也有着明显的不同微软在谈到竞争对手ESX Server时总会提到HyperV是微内核架构的而ESX Server是单内核架构HyperV要更好 这两者具有什么不同?到底谁更好呢? 单内核(分层的内核)与微内核 单内核和微内核实际上是操作系统内核术语操作系统的内核——实现核心功能的那部分——可能是微内核(Micro kernel)也可能是单内核(Monolithic kernel有时也叫宏内核Macro kernel)按照类似封装的形式这些术语定义如下 微内核(Micro kernel)――在微内核中最常用的功能被精心挑选设计在内核模式(或者按照上一页的说法在x上是Ring 模式)运行的一个或一组进程上而其它大部分不怎么重要的核心功能都作为单独的进程在用户模式下(类似地Ring 模式下)运行它们通过消息传递进行通讯(例如Windows采用的进程间通信IPC机制IPC就是Inter Process Communicate)最基本的思想就是要尽量地小通常微内核只包含了进程调度内存管理和进程间通信这几个根本的功能 这种设计具有许多好处例如增加了灵活性易于维护易于移植只需要把微内核本身进行移植就能够完成将整个内核移植到新的平台上同时微内核的模块化设计让其他核心功能模块都只依赖于微内核模块或其他模块并不直接依赖硬件 同样由于模块化的设计不包含在微内核内的驱动程序可以动态地加载或者卸载同时微内核也不依赖于固定的文件系统用户可以随意选择对文件系统的支持用户甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统不需要的模块将不会被加载到内存中因此微内核就能够更有效的利用内存微内核还具有的好处是实时性安全性比较好并且更适合于构建分布式操作系统和面向对象操作系统 微内核操作系统的典型例子是Mach(一个非原生的分布式操作系统内核也被应用在Mac OS X上)IBM AIXBeOS以及Windows NT还有着名的Minix(一个主要用于教学的Unix系统)和Amoeba(一个原生的分布式操作系统) 单内核(Monolithic kernel)――单内核是个很大的进程它的内部又能够被分为若干模块(或层次或其他)但是在运行的时候它是一个单独的大二进制映象因为是在同一个进程内其模块间的通讯是通过直接调用其他模块中的函数实现的而不是微内核那样在多个进程内进行消息传递因此在运行效率上单内核会具有一定的好处 单内核操作系统的典型例子是大部分Linux包括BSD在内的几乎所有的UnixMSDOSWindows x例如Sun Solaris的内核就运行着数百个线程以实现各种功能而编译过Linux内核的人就知道Linux内核有数十MB之大 单内核和微内核哪个更好显然是一个很有争议性的问题必须说明的很有趣的一点是这种争论经常会令人想到上一个时代CPU领域中RISC和CISC的斗争现代的成功CPU设计中包含了任何这两种技术就像现在Linux(单内核)和Windows NT(微内核)都是微内核和单内核的混合产物一样历史上有过这样的争论Linux(单内核)的作者Linus和Minix/Amoeba(均为微内核)的作者Andrew S Tanenbaum博士对垒最终Linus也同意微内核架构更为先进的论点 掉书袋就到这里回到HyperV上来通过采用微内核架构HyperV在体积上很有优势它的大小只有k左右(似乎新版本的更加小)而VMware ESX Server的Linux核心则非常大就VMM虚拟化管理程序来说需要的功能不多因此采用微内核架构是很合适的运行效率可以很高不过就理论上来说合理配置的单内核其实和微内核也很相似哪一种性能更好?这要在测试之后才能知晓了不过在这之前我们接下来可以先看看微内核带来的一个好处设备驱动程序的变迁 无论采用什么内核驱动程序和文件系统总是必要的虚拟机需要使用服务器的硬件就需要驱动程序虚拟机的文档需要保存在适当的文件系统上在单内核的VMware ESX Server上驱动程序包含在单内核内部虚拟机映像文件则保存在VMFS(一种类似EXT的文件系统)上那么微内核架构的HyperV呢? 这就要谈到HyperV的VSP/VSC架构了VSP是Virtual Services ProviderVSC则是Virtual Services Client还有一个VMBus部件将放在宿主操作系统的VSP和虚拟机操作系统的VSC连接起来实际上宿主操作系统也是一个虚拟机——就是你最初安装的带有HyperV的Windows Server 微软将其称为Parent Partition操作系统而每一个虚拟机则成为Child Partition VSP与VPC注意VSP并不是Virtual Storage Provider的缩写Virtual Storage Provider属于VSP 上图很好地解释了HyperV使用VSP/VSC架构解决驱动程序/文件系统的方式通过加入VSP和VSC以及它们互相沟通的VMBus总线HyperV将虚拟机的操作映射入Parent Partition的对应驱动程序/文件系统中简化起来就如下图 HyperV的VSPs/VSCsVMBus架构 这种方式具有不少好处例如最明显地HyperV可以兼容大量的驱动程序而不必为虚拟机开发专用的驱动程序(ESX Server就是这样干的)只要设备能在Windows Server 下工作那么HyperV虚拟机就能使用这些设备资源再加上Windows驱动天生就比其他操作系统(如Linux)的驱动丰富因此在硬件支持上HyperV具有着无可比拟的优势VMware ESX Server甚至不能直接应用Linux驱动程序需要另外进行额外的操作才能使用因此VMware ESX Server容易受到设备方面的问题当然用户可以使用具备VMware认证的全套硬件以避免这个问题 有利就有弊VSP/VSC架构需要支持HyperV技术的客户端的支持这样就大为限制了虚拟机操作系统的选择不支持HyperV的客户操作系统只能使用设备模拟的方式性能和以前的Virtual Server R没有太大的分别要享受到HyperV性能的提升需要虚拟机使用Windows Server 或者内含Xen的Linux/UnixHyperV的客户机操作系统的选择确实只注明了Windows和少数几种Linux虽然笔者猜测或多或少有着商业策略上的因素不过从技术上来看确实也有一些限制 HyperV设备驱动的这个优点正好就和微内核驱动程序架构的优点一样模块化架构灵活不需要更改就可以提供新硬件的支持 顺便提一下设备虚拟硬件辅助VTd技术在HyperV下的实现很轻松只需要开发Windows Server 下的驱动程序 HyperV还具有一个关于性能的重要特性多处理器虚拟机HyperV支持 CPU的Windows Server 虚拟机和 CPU的Windows Server 虚拟机多处理器虚拟机并不是一个HyperV才具有的特性VMware的ESX Server早已经实现 CPU的虚拟机并且是在各种操作系统下(WMware Workstation也能提供 CPU的虚拟机) 如果服务器工作负载需要很高的性能我们可以考虑使用多处理器的虚拟机数据库服务器可以消耗掉大量的处理器资源这时多处理器虚拟机就是很必须的就像我们做过的测试那样当然只有当工作负载确实需要的时候才应该使用多处理器虚机因为管理更多的处理器会带来一些额外的开销就像早期Window NT具有单处理器和多处理器两种内核一样(单处理器版本去掉了一些多处理器才有的如同步之类的模块并作了相关优化) 进程状态及其转换示意图进程的就在这些状态之间旋转 众所周知为了保护共享数据需要一些同步机制例如锁信号量等通常多处理器操作系统内核和驱动会采用自旋锁(Spin Lock类似于互斥锁但是保持时间更短更详细的信息可以参考《Windows Internals》第四版P)的机制在获得自旋锁之前线程并不会阻塞而是一直处于自旋状态前提是自旋锁只会保持很短的时间然而在虚拟化条件下这个前提会被打破件因为虚拟处理器是按照时间片进行调度的如果在保持自旋锁的时候竞争虚拟处理器则其他虚拟处理器就要自旋很长时间导致CPU循环的浪费 在Windows Server 内核以及HyperV Hypervisor中加入了一个创新设计尽可能防止出现自旋锁的长时间等待条件如果确实存在长时间等待条件也会有效地加以检测并对其进行处理这个方法叫做自旋锁启发方法未实现自旋锁启发方法的虚拟机作系统将停在一个紧凑循环上旋转以等待其他虚拟处理器释放自旋锁通常这个旋转可能会阻塞其中一个硬件 CPU从而降低了虚拟化性能而在自旋锁启发式操作系统中自旋锁代码会在将要发生旋转时通过Hypercall API通知HyperV Hypervisor管理程序这样Hypervisoer管理程序就可以立即调度执行另一个虚拟处理器并降低不必要的CPU使用HyperV还还在调度程序和内存虚拟化逻辑上进行了优化以使它们在大多数临界区中都不会被锁定从而确保多处理器系统能够获得很好的延展性 在前些天的媒体测试见面会上微软中国的工程师展示了HyperV虚拟机的效率表明 CPU的Windows Server 虚拟机其延展性可以和物理 CPU系统一较高下当然具体的提升仍然需要通过测试来评估 注自旋锁启发方法其实不完全是HyperV的内容它更多是Windows Server 的核心内容Vista也实现了这个自旋锁启发方法 不知不觉间说了很多显得有些深涩的内容不过HyperV的特点总结起来就是VT/AMDV实现微内核设计VSP/VSC虚拟设备驱动架构以及虚拟处理器自旋锁启发架构这些特性糅合在一起就形成了独特的HyperV此外$的价格(或者购买Windows Server 免费)也很值得一提 微软服务器虚拟化战略的里程碑HyperV 更好的性能更广泛的兼容性更强的安全性以及更便宜——这就是HyperV从年收购Connetix后就沉寂的微软并没有睡着从最早的Terminal Services到早期的Virtual PCVirtual ServerSoftGrid到今天HyperV的推出这些看似不经意的动作现在看来均是为其全面的虚拟化战略实施做铺垫而经过这样一系列的铺垫微软的从数据中心到桌面虚拟化全面的端到端的虚拟化战略已经正式部署完毕我们已经可以看到虚拟化市场即将到来的一场暴风雨 |