本系列初步构思有五篇文章,主要介绍网络虚拟化,存储虚拟化,服务器虚拟化,桌面虚拟化和应用虚拟化。


       先从我们大多数人较熟悉和常用的服务器虚拟化开始。这里所说的服务器虚拟化,包含服务器操作系统的虚拟化,也包含办公娱乐操作系统的虚拟化,说白了就是对各种操作系统的虚拟化,我们用户使用到的虚拟机(VM,Virtual Machine)。


一、云计算

      在谈论虚拟化之前,却有必要说明一下云计算。

      云计算,这个名词如今已是大红大紫,但现在还没有权威的具体的定义。我反复查找资料,看到美国国家技术和标准研究院(NIST)有一个定义供参考。

     “云计算是一个提供便捷的可通过网络访问一个可定制的计算资源池的服务模式(计算资源包含存储,网络,服务器,应用和开发等);这些资源能够快速部署,并只需要很少的管理工作或与服务供应商很少的交互。”

     上面一段话理解起来有点深奥晦涩,在这里我仅罗列云计算的一些特点,(我个人理解的云计算)具有如下一些特点:

      资源池化

      按需使用

      自助服务

      虚拟化和网络化

      高效率和低能耗

      可扩展和可度量

      任意设备和便捷访问

      虽然目前业界对云计算没有完整权威定义,但当今云计算的具体服务模式,却显而易见的有以下三种方式:

      基础设施即服务 Infrastructure as a Service,IaaS

      平台即服务 Platform as a Service,PaaS

      软件即服务 Software as a Service,SaaS

      我说了这么多废话,大家好像也没看出与今天要探讨的虚拟化有多大关系,诸位且慢,请看下图一所示。

210428306.jpg

(图一、虚拟化与云计算架构)


      可见虚拟化是云计算的基础,离开了虚拟化,可以说云计算必然成了无源之水无本之木。


二、虚拟化

      那什么是虚拟化呢?较学术的解释如下:

      “一种对不同计算资源进行隔离、去耦合的过程。”

      照我的理解,就是实现软件与硬件无关(也可以说是把硬件标准化),这样就达到操作系统和软件资源可在不同物理硬件之间移动和运行的目的。


三、虚拟化架构

      当今用于服务器虚拟化的体系架构,归纳起来可以说有如下图二所示的三种:

210508383.jpg

(图二、常见的三种虚拟化架构)


      这里面涉及到一个叫VMM的层,我们称其为虚拟机监控器(Virtual Machine Monitor),它主要是实现多个独立实例共享同一底层硬件资源。

      最左边的,可以叫程序虚拟化,常见的就是Java虚拟机,它隔离特殊进程,为其创造运行环境,达到与操作系统无关,程序不必为特定的操作系统或硬件编写。

      中间的这种,我们可以说是混合虚拟化,就是在操作系统底层(Ring0)加入相应驱动,但还与操作系统应用层(Ring3)有交互,也就是说虚拟化管理层是运行在主机操作系统之上,依靠主机操作系统来模拟硬件设备,以便在其上运行虚拟机,其优点是对物理硬件要求低,但是性能相对差。常见的例子有微软的Virtual PC/VirtualServer;VMware的VMware Workstation/VMware Server;VirtualBox等。

      最右边的,可以说是真正的虚拟化,有的称其为裸金属架构。他是直接在硬件上跑虚拟化管理层,其优点是性能比较好。裸金属架构的虚拟化管理层,一般叫做Hypervisor,它一般运行在Ring1层(进一步解释见下一段落)。常见的有VMware ESX Server,微软的Hyper-V(微软2003年收购Connectix后获得的技术发展而来),思杰的XenServer(源于英国剑桥大学计算机实验室开发的一个Xen虚拟化开源项目)。

      该体系架构最初有牛哄哄的IBM于上世纪60年代设计,主要是用于大型机的。事实上要实现虚拟化,还得处理器硬件支持。x86 处理器有 4 个特权级别:Ring 0 ~ Ring 3,只有运行在 Ring 0 ~ 2 级时,处理器才可以访问特权资源或执行特权指令;运行在 Ring 0 级时,处理器可以访问所有的特权状态。x86 平台上的操作系统一般只使用 Ring 0 和 Ring 3 这两个级别,操作系统内核等运行在 Ring 0 级,用户进程运行在 Ring 3 级。为了避免来宾操作系统控制系统资源,Hypervisor不得不降低自身的运行级别,一般运行在 Ring 1级(Ring 2 不使用)。x86处理器硬件起先并不带有虚拟化功能(主要就是实现Hypervisor运行在 Ring 1级),在2005年与2006年,英特尔与AMD分别在它们的x86架构上实现和硬件支持虚拟化。


四、裸金属架构的区别

      如上所述,即使是裸金属架构的虚拟化,它也有一个VMM的层,一般又叫做Hypervisor,并且一般运行在Ring1层。主要代表有VMware ESX Server和微软的Hyper-V。但他们两家也还有一些不同之处。如下图三所示。

210540914.jpg

(图三、胖廋虚拟化比较)


      VMware ESX Server由于把底层物理硬件的驱动程序整合到Hypervisor管理层中,所以管理层显得比较胖,我们不妨称其为胖虚拟化。这种架构对底层物理硬件的要求比较高,稳定性和安全性的挑战比较高。

      微软的Hyper-V,Hypervisor管理层仅用于管理CPU和内存,而不包含底层物理硬件的驱动程序,所以管理层显得比较瘦,我们不妨称其为瘦虚拟化。由于不包含硬件驱动,所以代码量比较小,安全性更高、稳定性也更好,更进一步的介绍请看下一章节分解。


五、Hyper-V介绍

      微软的Hyper-V架构如下图四所示。

210606989.jpg

(图四、Hyper-V架构)


      Hyper-v架构相关术语

      除了独立版本的Hyper-V服务器之外,一般的微软Hyper-V都需要一个父分区,其中运行支持Hyper-V的服务器操作系统或桌面操作系统。

      父分区中的虚拟化堆栈可以直接访问物理设备,通过父分区,可以创建子分区并在其中运行来宾操作系统(Guest Operating System,Guest OS),各个子分区的虚拟内存空间都是相互独立的。Hypervisor层(图中Microsoft Hyper-V层)执行处理器中断。

      子分区不能访问其他任何物理资源,它们通过虚拟设备的方式来访问硬件,对于虚拟设备的请求,通过VMBus或者Hypervisor层来转到父分区,交由父分区代为处理。

      在父分区运行的虚拟服务端程序(VSP)通过VMBus处理来自子分区的设备请求。在子分区中运行的虚拟服务用户端(VSC)通过VMBus将请求交给VSP来处理。这些操作的过程,对Guest OS来说,都是透明的。

      VMBus:运行在物理机共享内存里的虚拟机高速总线,通过VMBus,子分区里的所有硬件请求可以通过VMBus快速的递交给父分区,然后由父分区来完成相应硬件的调用。它是支持即插即用的总线,如在物理机里插入的SCSI设备、网卡支持VMBus的显卡。那么,安装在Hyper-v的虚拟机将会自动的加载挂载在VMBus里的相应硬件驱动,从而供虚拟机使用。
      VSP:全称Virtual Services Provider即虚拟服务提供程序,它是和VMBus相关的两个进程之一。它存在于父分区中,用来监听来自于VMBus数据的请求,然后把这些请求通过物理机里的I/O堆栈直接转到相应的硬件驱动程序上参与Hypervisor直接交接到相应的设备上去。VSP它支持多路复用技术,即可以监听来自多个物理机上多个虚拟机的硬件调用通信,如物理机上只有一个显卡和对应的VSP,但是VSP可以处理来自多个虚拟机上的显卡的请求。然后通过VMBus来进行相应转发。
      VSC:全称Virtual Services Client即虚拟机服务客户端,它是和VMBus相关的另一个进程。它存在于子分区中,用来监听虚拟机里应用程序对虚拟机里的I/O堆栈所发送的设备请求,让后把请求转换为VMBus能够识别的数据格式,让后再发送到VMBus上,最后再转发给相应的VSP,VSP再转给相应的硬件驱动。从而完成虚拟机上应用程序对硬件的调用。
      VM Worker Process(工作者进程):用来和每个子分区(虚拟机)进行一一绑定从而来进行虚拟机之间的隔离。
      WMI Provider(windows 管理接口提供程序):提供对虚拟机进行管理的windows管理接口。
      VM Services(虚拟机服务):虚拟机相对应的服务进程。
      HyperCall Adapter(虚拟设备):支持VMBus的设备。
Emulation(模拟设备):不支持VMBus的设备。


    在Hyper-V的技术架构上,子分区分为三类:

      1、运行Windows操作系统并有Hyper-V意识。

      2、运行非Windows系统并有Hyper-V意识,需要HyperCall Adapter(虚拟设备),支持VMBus的设备。

      3、无Hyper-V意识,可能运行Windows或非Windows操作系统;即Emulation(模拟设备):不自持VMBus的设备。

      这三类分区的区别在于:

      1类分区可以使用VSC和“Enlightenments”获得最好的性能和全部Hyper-V特性;通信过程见如下图五所示。

210638440.jpg

(图五、全Hyper-V意识)

      2类分区可以通过VSC和第三方驱动实现较高的性能和部分Hyper-V特性;通信过程见如下图六所示。

210702701.jpg

(图六、部分Hyper-V意识)

      3类分区只能通过模拟设备访问硬件资源,效率较低;造成其效率低,主要是因为其模拟器效率低下,通信过程见如下图七所示(不使用高速虚拟总线VMBus通信)

210725599.jpg

(图七、无Hyper-V意识)


       什么叫Hyper-V意识?从当前微软给出的资料来看,经过“启蒙”(Enlightenments)的操作系统,可以和Hpyer-V结合度更高,获得最好的性能和全部Hpyer-V特性。这里个人理解,“启蒙”的含义主要就是来宾操作系统能否直接识别、支持Hyper-V的标准硬件(也就是说直接驱动);是否支持Hyper-V的某些核心技术;还有是否支持CPU等硬件的某些最新技术,如CPU支持二级地址转换( SLAT: Second Level Address Translation)。


六、写在最后

     本文首先从云计算、虚拟化入手,介绍了三种当今常见虚拟化技术架构,再分别描述了裸金属架构下两种实现方式的优缺点,最后稍详细的介绍了Hyper-V下的三种来宾系统情况。因作者个人的开发测试环境已经从Virtual PC/VMware Workstation转移到Windows8的Hyper-V下,效果极度完美,老是有人问及什么条件下才可尝鲜一把Windows8的Hyper-V,现写在下面,也算是结尾。

       软件方面:

       除了主板BIOS有无开启CPU虚拟化功能选项外;Windows8,要具有虚拟化,操作系统必须是64位的专业版或企业版。

      硬件方面:
       1、 需要一个 64 位处理器;
       2、CPU支持虚拟化。包括虚拟化选项(具体来说是 Intel 虚拟化技术 (Intel VT) 或 AMD 虚拟化 (AMD-V) 技术)的处理器提供此功能。
       3、硬件强制实施的数据执行保护 (DEP) 必须可用且已启用。具体地说就是,你必须启用 Intel XD 位(执行禁用位)或 AMD NX 位(无执行位)。
       4、CPU支持二级地址转换( SLAT: Second Level Address Translation)。
如果是Windows 2008R2/2012等开启Hyper-V不需要此功能。