天高地厚

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

虚拟化技术大练兵

Posted on 2013-01-18 15:44  天高地厚-GNU  阅读(212)  评论(0编辑  收藏  举报
Hyper在安全性上的全面超越,主要建立在其基于VMbus的高速内存总线架构上,由于Hyper-V底层的Hypervisor代码量很小,不包含任何第三方的驱动,非常精简,所以安全性更高。
 
众所周知,为了保护共享数据,需要一些同步机制,例如锁、信号量等。通常,多处理器操作系统内核和驱动会采用自旋锁的机制,在获得自旋锁之前,线程并不会阻塞,而是一直处于自旋状态,前提是自旋锁只会保持很短的时间。
 
然而在虚拟化条件下,这个前提会被打破,因为虚拟处理器是按照时间片进行调度的。如果在保持自旋锁的时候竞争虚拟处理器,则其他虚拟处理器就要自旋很长时间,导致CPU循环的浪费,降低了虚拟机的性能。显然,多处理器虚拟机在繁忙的负载条件下,这种情况会频繁发生,而这成为了虚拟技术的一个巨大瓶颈,VMware十年的攻坚克难并没有使这一情况改观。
 
而这些只会发生在VMware独霸的时代,Hyper-V采用基于VMbus的高速内存总线架构,来自虚机的硬件请求(显卡、鼠标、磁盘、网络),可以直接经过VSC,通过VMbus总线发送到根分区的VSP,VSP调用对应的设备驱动,直接访问硬件,中间不需要Hypervisor的帮助。
 
这种架构效率很高,不再像VMware的那些产品,每个硬件请求,都需要经过用户模式、内核模式的多次切换转移。更何况Hyper-V现在可以支持Virtual SMP,Windows Server 2008虚机最多可以支持4个虚拟CPU;而Windows Server 2003最多可以支持2个虚拟CPU。每个虚机最多可以使用64GB内存,而且还可以支持X64操作系统。这些都是新一代的VMware ESX所不具备的,这其实代表了Hyper-V在虚拟化技术上超越VMware的一个里程碑。
 
Hyper-V的hypervisor架构
 
  在微软Hyper-V模型中,hypervisor层直接运行于物理服务器硬件之上。所有的虚拟分区都通过hypervisor与硬件通信,其中的hypervisor是一个很小、效率很高的代码集,负责协调这些调用。
 
  图1是Hyper-V的结构图
 
  Microsoft Hyper-V架构概况
 
  图中每一个分区都代表一台虚拟机。父分区必须运行Windows Server 2008,它包含了一个虚拟堆(virtualization stack)。这个堆包含了管理工具和自动操作组件,如WMI(Windows管理规范)界面。每个子分区可以有自己的子操作系统。请注意,所有的操作系统都在分区中运行,包括可能被认为是主操作系统的父分区操作系统。
 
  到目前为止,这很可能看起来非常简单。然而,它与现行的虚拟化方法也有一些很重要的架构差别。
 
  依靠VMBus
  Hypre-V包含一个极小的微核结构,这个微核结构可以让多个分区访问同一个物理硬盘资源。保持hypervisor微小有助于减少安全性攻击面积,也有助于保持效率。子分区需要与父分区进行通信以便管理。这可以通过使用逻辑点对点的VMBus完成。员工处理每个子分区的服务管理操作和请求,如启动或监控虚拟机。VMBus使用共享存储器在同一主机服务器上与虚拟机进行安全通信。
 
  驱动差别
  处理虚拟机一个很烦人的部分是硬件驱动的问题。在大多数情况下,你都是受到虚拟硬盘层的限制,这是由你的虚拟化平台所暴露出来的问题。由于兼容性的缘故,大部分虚拟化解决方案都模拟硬件环境。如果是在二十世纪九十年代中期,模拟硬件环境一定会很流行,但是与现代服务器相比,它就跟TRS- 80差不多了。这就意味着你有两个依赖:
 
  (1)物理硬件必须支持虚拟模拟层;
  (2)子操作系统必须有模拟硬件驱动。通常,你会有支持物理硬件的必要驱动,却没有虚拟硬件的驱动。
 
  Hyper-V方法与其它基于hypervisor产品(如VMware ESX Server平台)的最大差异在于驱动器的工作方式不同。在Hyper-V中,驱动器是安装在子操作系统中的,而不是在hypervisor层。这样,厂商和管理员就可以使用为服务器物理硬件设计的驱动,而不是虚拟硬件的驱动器。
 
  启蒙:子操作系统类型
 
  目前,大多数潜在的子操作系统都还没有意识到虚拟化。它们以为是直接在服务器硬件上运行,因此需要使用hypervisor提供的硬件模拟。每个支持"无hypervisor意识操作系统"的分区都使用Hyper-V的模拟层。这对遗留的操作系统同样适用。
 
  为了充分利用Hyper-V架构,子操作系统可以使用"enlightenments(启蒙)"(微软目前是这样称呼的)。一个被启蒙过的子操作系统会记住虚拟化,从而可以和hypervisor进行有效的通信。被启蒙过的子机运行自己的驱动,其驱动可以与服务器的物理硬件进行通信。例如,一个与磁盘有关的调用可以直接连接到底层使用SCSI连接的直属存储阵列。IHVs和OEMs可以创建它们自己的操作系统驱动。
 
Microsoft Hyper-V 和VMware ESX Server都是基于硬件支持的Bare-Metal虚拟化产品,他们最大的区别在于,Microsoft Hyper-V采用了微内核的结构,而ESX Server是一个单内核的产品。
 
  单内核的主要特点是硬件的驱动程序集中在Hypervisor一层,被Hypervisor上的所有的虚机所共同使用。当一个虚机的OS需要访问硬件时,它通过Hypervisor中的driver model来访问,这种单内核的Hypervisor能够提供很好的性能,但是它在安全性和兼容性上存在缺陷。由于驱动程序和一些第三方代码跑在一个很敏感的区域内,这种模式有了一个很大的被攻击面。
 
  设想下某些不怀好意的代码被隐藏在驱动程序当中,然后跑在Hypervisor中,这会影响到所有的客户虚拟机,而且这是很难被发现的,因为对于实际被使用的虚机来说,Hypervisor这层是不可见的,所以无法通过一些病毒软件去监控它。 另外一个问题就是稳定性,假设某个驱动程序当中存在bug,那么它将影响到所有的虚机。另外你还要求Hypervisor去支持所有的驱动程序,造成了这层体积较为庞大。所以单内核的Hypervisor一般被认为是胖Hypervisor。
 
  而Hyper-V采用了微内核的结构,它是一个瘦Hypervisor。因为它里面没有驱动程序,所以在体积上Hyper-V更有优势,另外,由于微内核体积较小,所以运行的效率很高。驱动程序是跑在每一个分区里面的,每一个分区内的虚机OS都能够通过Hypervisor直接访问硬件,还使得每一个分区都相互独立,这样就拥有更好的安全性和稳定性。
 
  除此之外,大多数虚拟化解决方案都是采用了硬件模拟来解决硬件访问的兼容性问题,但是也造成了很大的开销和性能损失。而微软的Hyper- V没有采用这样的做法,而是采用了Enlightenment(启蒙)技术。它能够对那些虚拟机操作系统进行启蒙,让它们明白自己是一个虚拟机,被启蒙过的虚拟机操作系统会记住虚拟化,所以他们可以不需要硬件模拟,而是通过VSP/VSC这套组件来进行的,当子分区内的操作系统需要访问硬件的时候,由子分区内的VSC(Virtualization Service Client)通过VMBUS将request发给父分区里面的VSP(Virtualization Service Provider),然后由VSP去提供实际的硬件服务。通过这种方式来使用硬件,相对于使用硬件模拟的方法,其访问性能有了大幅度的提高。
 
  另外这种方式可以兼容大量的驱动程序,而不必像ESX Server一样为虚拟机开发专用的驱动程序。在大多数情况下,只要硬件设备能够在Windows Server 2008下工作,那么就肯定能够在虚拟机下工作。再加上Windows平台的驱动本来就比其他平台的驱动程序丰富,而ESX Server容易遇到兼容性方面的问题,所以在硬件兼容性支持上Hyper-V具有无可比拟的优势。