
2.1 虚拟化的定义与基本概念
2.1.1 虚拟化定义
“虚拟化”并不是一个新的技术,早在20世纪60年代的IBM大型机系统中就曾提出这个概念。当时“虚拟化”的含义局限于将大型机的资源在逻辑上划分给不同的应用程序,通过多任务处理,可在大型机上同时运行多个应用程序和进程。随着时间的推移,“虚拟化”一词的内涵已经扩展到对硬件平台、操作系统、存储设备与计算机网络资源的抽象、定义与资源的重新整合。
关于虚拟化的定义并没有严格的标准。下面给出一些典型定义:
●“虚拟化通常是指一种分离机制,即将服务请求从物理层提供的服务中分离出来。”——VMware公司
●“虚拟化是资源的逻辑表示,它不受物理限制的约束。”——IBM公司
●“虚拟化是对物理资源和位置的抽象,服务器、应用程序、桌面、存储与网络等IT资源不再与物理设施紧密耦合,而是呈现为逻辑资源,虚拟化技术就是对物理资源和逻辑资源之间的映射关系进行创建和管理。”——EMC公司
综上,虚拟化技术的核心就是对物理资源的抽象。在实现上,通过提供类似于一个通用接口的操作集合来隐藏物理层不同属性的差异。
2.1.2 虚拟化产生背景
虚拟化技术的产生与发展是与大型机的发展和服务器的硬件成本变化息息相关的。20世纪50年代至70年代正是大型机的黄金时期,但是大型机成本高昂,用户和厂商都在探索提高硬件利用率和降低成本的方法。在这一背景下,IBM公司的CP-67软件率先通过分区技术允许多个应用程序同时在大型机系统上运行。尽管这对大型机市场产生了巨大的影响,但是毕竟曲高和寡,这种早期虚拟化技术无法对当时的业界产生类似于今天的影响。随着分布式计算和多用户操作系统的逐渐普及,以及硬件成本的快速下降,成本低廉的服务器开始崭露头角,大型机上的虚拟化技术开始遇冷。到了80年代,大部分厂商基本放弃了虚拟化技术,与此同时发展起来的计算机架构自然就没有包括对于虚拟化的支持。
当进入20世纪90年代,Windows和Linux操作系统的快速发展使得x86处理器在性能上不断得到提升,逐渐奠定了其行业标准地位。然而随着基于x86服务器和桌面部署的增长,人们开始发现:尽管服务器硬件设施的规模在不断扩大,但是绝大多数服务器上都仅仅运行一个应用程序。根据IDC统计,在一个典型的x86服务器上,CPU利用率最高也不过10%~15%。伴随着低资源利用率,还有不断攀升的运维成本:供电、冷却以及复杂的维护管理开销。由于系统的复杂性随着系统的规模呈指数级增长,IT维护逐渐成为企业的难题。特别是一些7×24小时不间断运营的业务模式,更加使得IT维护难度雪上加霜。
很显然,在x86服务器上又重现了20世纪60年代大型机所面临的同样的问题:物理服务器的资源没有被充分利用,而且不断变化的业务模式使得这种状况愈加复杂。
在这样的时代背景下,VMware公司将虚拟化技术引入到x86平台上。1999年,Vmware公司发布了VMware WorkStation的第一个版本,该版本将x86 32位平台进行虚拟化。不久之后,Vmware公司又发布了ESX系列产品,开创了x86平台虚拟化的格局。另一个虚拟化平台Xen也在同时期迅速发展。Xen最初是剑桥大学实验室20世纪90年代末的一个内部研究项目,在获得了Linux Foundation的资助后,很快成为开源虚拟化系统的成功典范,目前诸如IBM、Intel、Redhat等公司都是Xen开源社区Xen.org的成员。而传统的桌面操作系统巨头微软公司也于2008年加入虚拟化的阵营,在推出Windows Server 2008的同时推出了Hyper-V。Intel与AMD等硬件厂商则在硬件虚拟化方面为虚拟化技术推波助澜,使得虚拟化技术得到进一步完善。
本章将介绍几种主要的虚拟化技术原理,以及CPU虚拟化、内存虚拟化与I/O虚拟化技术。最后会以VMware和Xen系统为例,具体介绍虚拟化技术的实现。
2.1.3 计算虚拟化
所谓计算虚拟化,从狭义角度可理解为对单个物理服务器的虚拟化,主要包括对服务器上的CPU、内存、I/O设备进行虚拟化,以实现多个虚拟机能各自独立、相互隔离地运行于一个服务器之上。从广义角度也可理解为对网络中的CPU、内存、I/O设备等资源进行整合、抽象和虚拟化。
本章我们主要介绍在单个服务器上基于x86平台的虚拟化技术。
如图2-1所示,一个完整的服务器虚拟化平台从下到上包括以下几个部分:

图2-1 虚拟化系统架构
●底层物理资源:包括网卡、CPU、内存、存储设备等硬件资源,一般将包含物理资源的物理机称为宿主机(Host)。
●虚拟机监控器(Virtual Machine Monitor,VMM):VMM是位于虚拟机与底层硬件设备之间的虚拟层,直接运行于硬件设备之上,负责对硬件资源进行抽象,为上层虚拟机提供虚拟运行环境所需资源,并使每个虚拟机都能够互不干扰、相互独立地运行于同一个系统中。
●抽象化的虚拟机硬件:即虚拟机呈现的虚拟化的硬件设备。虚拟机能够“看到”何种硬件设施,完全由VMM决定。虚拟设备可以是模拟的真实设备,也可以是现实世界中并不存在的虚拟设备,如VMware的vmxnet网卡。
●虚拟机:相对于底层提供物理资源的物理机,也称为客户机(Guest)。运行在其上的操作系统则称为客户机操作系统(Guest OS)。每个虚拟机操作系统都拥有自己的虚拟硬件,并在一个独立的虚拟环境中执行。通过VMM的隔离机制,每个虚拟机都认为自己作为一个独立的系统在运行。
人们通常认为VMM就是Hypervisor(超级管理程序),但是在不同的虚拟化系统中,VMM和Hypervisor有着一定的区别。如图2-2中的VMware ESX的产品架构,Hypervisor是位于虚拟机和底层物理硬件之间的虚拟层,包括boot loader、x86平台硬件的抽象层以及内存与CPU调度器,负责对运行在其上的多个虚拟机进行资源调度。而VMM则是与上层的虚拟机一一对应的进程,负责对指令集、内存、中断与基本的I/O设备进行虚拟化。当运行一个虚拟机时,Hypervisor中的vmkernel会装载VMM,虚拟机直接运行于VMM之上,并通过VMM的接口与Hypervisor进行通信。
在如图2-3和图2-4所示的KVM与Xen架构中,虚拟层都称为Hypervisor,不再有类似于ESX中与虚拟机一一对应的专门提供虚拟化功能的进程。为了统一概念,我们在后文中将虚拟化系统中的虚拟层统称为VMM。

图2-2 VMware ESX产品架构

图2-3 KVM产品架构

图2-4 Xen产品架构
2.1.4 VMM的要求与基本特征
VMM应该具备什么样的特性来确保上述功能呢?早在1974年,Gerald J.Popek 与Robert P.Goldberg就在他们合著的论文《Formal Requirements for Virtualizable Third Generation Architectures》中,对VMM提出了三个需要满足的条件:
●等价性(Equivalence Property):一个运行于VMM控制之下的程序(虚拟机),除了时序和资源可用性的影响,其行为应该与相同条件下而没有VMM时的行为一致。
●资源可控性(Resource Control Property):VMM必须能够完全控制虚拟化的资源。
●效率性(Efficiency Property):除了特权指令,绝大部分机器指令都可以直接由硬件执行,而无需VMM干涉控制。
自从这三个条件被提出以来,就一直被认为是判断一个VMM是否能够有效确保系统实现虚拟化的准则,并为设计虚拟化系统提供指导思想。
2.1.5 虚拟化平台的不同架构
目前主流的虚拟化平台主要包含以下三种:宿主模型、Hypervisor模型与混合模型。
宿主(Hosted)模型如图2-5所示,在该结构中所有资源由Windows、Linux等宿主机操作系统进行管理,VMM则是操作系统中的一个独立内核模块,借助宿主机操作系统的服务提供虚拟化功能。虚拟机被创建后作为一个进程进行调度。当VMM拦截到虚拟机对I/O设备的访问,会把I/O请求转发给一个用户态级别监控器(User Level Monitor,ULM)中的虚拟设备进行处理,ULM则会通过调用宿主机的设备接口来处理收到的I/O请求。采用这种架构的主要有Vmware公司早期的虚拟化产品,如VMware Workstation与VMware Server。

图2-5 宿主模型
Hypervisor模型如图2-6所示,在该模型中虚拟层能够直接运行于硬件设备之上,控制系统中所有资源能够灵活实现各种虚拟设备,并直接为虚拟机提供服务。相比于宿主模型必须借助传统操作系统实现虚拟化的局限性,该模型的灵活性与性能有了很大的提升。这种模型的典型代表是Vmware公司的ESX产品。
混合(Hybrid)模型可以看做是宿主模型与Hypervisor模型的混合体(如图2-7所示)。该模型一方面让虚拟层直接运行于硬件之上,拥有所有物理资源;另一方面借鉴了宿主模型中保留操作系统已有的设备接口的特点,将I/O设备的控制权放在一个特殊的虚拟机(Service VM)中。当其他虚拟机要访问I/O设备时,I/O请求会被转发给Service VM中的设备模型进行处理。由于I/O请求从Hypervisor中分离出来,Hypervisor只负责CPU与内存的虚拟化,因此整体系统性能较高。开源虚拟化系统Xen与Hyper-V是该模型的代表产品。

图2-6 Hypervisor模型

图2-7 混合模型