Xen 虚拟化技术
本节中将以主流的 Xen 体系架构为例,说明虚拟化系统的一般技术架构和工作原
理。
1.Xen 体系结构(Xen Hypervisor)
Xen Hypervisor(即 Xen 的 VMM)位于操作系统和硬件之间,负责为上层运行的
操作系统内核提供虚拟化的硬件资源,负责管理和分配这些资源,并确保 上层虚
拟机(称为域)之间的相互隔离。Xen 采用混合模式,因而设定了一个特权域用以
辅助 Xen 管理其他的域,并提供虚拟的资源服务,该特权域称为 Domain 0,而其
余的域则称为 Domain U。
Xen 的体系架构如图 7-25 所示。Xen 向 Domain 提供了一个抽象层,其中包含了管
理和虚拟硬件的 API。Dom0 内部包含了真实的设备驱动 (原生设备驱动),可直
接访问物理硬件,负责与 Xen 提供的管理 API 交互,并通过用户模式下的管理工
具来管理 Xen 的虚拟机环境。
(点击查看大图)图 7-25 Xen 体系架构图
Xen 向 Domain 提供了 VCPU、虚拟 MMU(Memory Management Unit)等基本的
虚拟硬件和基本机制(事件通道),并向 Domain 提供了虚拟域管理 API(控制接
口)。对 Domain 设备的访问,Xen 也提供了相 应的硬件接口(安全硬件接口),
以保证设备访问得以安全进行。
在 Xen 体系架构中涉及到的基本概念包括:
控制接口:仅能被 Dom0 使用,用于帮助 Dom0 控制和管理其他的 Domain。控制
接口提供的具体功能包括 Domain 的创建、销毁、暂停、恢复及迁移,对其他
Domain 的 CPU 调度、内存分配及设备访问等。
安全硬件接口:提供除虚拟 CPU、MMU 之外的所有硬件虚拟工作,包括 DMA/IO、
驱动程序、虚拟的 PCI 地址配置、虚拟硬件中断等。该接口只能被具有原生设备
驱动的 Domain 使用,而向其他 Domain 则仅通过设备通道提供虚拟硬件服务。
VCPU:Xen 为每个 Domain 建立了 VCPU 结构,用以接收 Guest OS 中传递的指令,
其中大部分的指令被 VCPU 直接提交到物理 CPU 执行,而对于特权指令则需要经
过确认后交由 Xen 代为执行。
虚拟 MMU:用于帮助 Guest OS 完成虚拟地址到机器地址的转换。Xen 系统中增加
了客户物理地址层,因而地址由原来的二层结构变为三层结构。Xen 通过虚拟
MMU 仍能使用硬件 MMU 来完成地址转换。
事件通道:是用于 Domain 和 Xen 之间、Domain 相互之间的一种异步事件通知机
制,用于处理 Guest OS 中的虚拟中断、物理中断以及 Domain 之间的通信。
设备管理器:位于 Dom0 和 IDD(Independent Device Domain)中,可作为系统
BIOS 的扩展,用于向所有的设备提供通用的管理接口,并负责在 Domain 启动时
加载特定的设备驱动、建立管理设备通道、提供硬件设备配置接口并处理设备访问
错误。
2.CPU 虚拟化
(1)半虚拟化
对 CPU 指令集不提供硬件支持的情况,Xen 只能采取半虚拟化的方案,通过修改
Guest OS 的内核对有缺陷的指令进行替换。在这种模式下,Xen 位于操作系统和硬
件之间,为其上运行的 Guest OS 内核提供虚拟化的硬件环境,因而 Xen 具有最高
特权级,而 Guest OS 被迫迁移到相对低的特权级中,称为特权解除(Privilege
Deprivileging)。
x86 架构中,CPU 提供了 4 个特权级(0 环到 3 环)以及分段和分页的内存保护机
制,但目前多数操作系统中均只使用到了 0 环和 3 环两个特权级,对应 地存在两
种特权解除方式:0/1/3 模型(操作系统运行在 1 环、VMM 运行在 0 环、应用程序
运行在 3 环)和 0/3 模型(操作系统和应用程序运行在 3 环,VMM 运行在 0 环)。
无论采用哪种模型,Xen 都将替代原操作系统内核占据最高的特权级,因而在 Xen
下运行的 Guest OS 内核将无法执行某些特权指令,并将产生一般保护性错误,Xen
必须通过超级调用向 Guest OS 提供执行这些特权指令执行的接口。
(2)硬件虚拟化
面前 x86 架构中通过引入新的指令和处理器运行模式,使得 VMM 和 Guest OS 运
行在不同的模式下,Guest OS 只能在受控模式下运行,而在需要 VMM 进行监控
和模拟时由硬件支持模式的切换。在硬件虚拟化方式下,不需要对 Guest OS 内核
进行修改,而是直接由硬件完成指令的捕获。
3.内存虚拟化
在半虚拟化模式下,Xen 的内存虚拟化通过内存分段保护机制,使得 Xen 和 Guest
OS 共存于同一个内存地址空间中,简化了 Xen 对 Domain 内存的分配和管理工作,
同时利用内存分页机制,Xen 可保证各 Domain 在内存上的有效隔离。
Xen 需要确保任意两个非特权 Domain 不会访问到同一内存区虚拟域,因而每一页
或页目录的更新必须经过 Xen 的确认,以保证每个 Domain 只 能控制自己的页表。
通过修改 Guest OS 的内核,Xen 可让 Guest OS 也参与到内存管理工作中来,Xen
可更多关注于内存虚拟化中更重要的内存隔离工作,同时也可让硬件 MMU 在
Guest OS 的三层地址转换中发挥作用。
在物理内存的管理中,Xen 引入了 VMware 最先采用的气球驱动模型来调节分配给
各 Domain 的物理内存。
气球驱动可作为驱动程序运行在 Guest OS(即 Domain)中,Guest OS 通过该驱动
与 Xen 通信。当 Domain 需要更多内存时,将通过气球驱动向 Xen 提交内存申请请
求,Xen 可向气球驱动减压以便将将气球驱动所占用的 部分空闲内存或通过气球
驱动从其他 Domain 回收的内存分配给提交请求的 Domain。如果 Xen 的可用空余
内存过低,需要从某个 Domain 回收部分 占用的内存,Xen 可向气球驱动加压使气
球膨胀,Guest OS 将回收页面、释放内存以便给本地气球分配足够的内存空间,
然后气球驱动将分配到的页面传给 Xen,Xen 将这些空闲内存集中起来备用。相关
的工作原理 如图 7-26 所示。
(点击查看大图)图 7-26 气球驱动模型示意图
4.I/O 虚拟化
在半虚拟化模式下,Xen 采用了分离设备驱动模型来实现 I/O 的虚拟化。该模型将
设备驱动划分为前端驱动程序、后端驱动程序和原生驱动三个部分,其 中前端驱
动在 DomU 中运行,而后端驱动和原生驱动在 Dom0(IDD)中运行。前端驱动负
责将 Guest OS 的 I/O 请求传递到 Dom0(IDD)中的后端驱动,后端驱动对 I/O 请
求解析并映射到物理设备,提交给相应的设备驱动程序控制硬件完成 I/O 操作。
后端驱动检查接收到的 I/O 请求的有效性,并进行虚拟设备地址到物理设备地址的
转换。转换之后,后端驱动将通过 Dom0(IDD)中 Guest OS 提供 I/O 接口,间接
地控制原生设备驱动完成提交的请求。
前端驱动和后端驱动之间 I/O 请求的传递是通过 Xen 内部的一个环形队列(I/O 环)
来实现的,其结构参见图 7-27 所示。I/O 环实际上是 Xen 提供的一块供 DomU 和
Dom0(IDD)访问的共享内存。
图 7-27 Xen 的 I/O 环结构
针对大量 DMA 数据在 DomU 和 Dom0(IDD)之间的高效传递需求,Xen 提供了
授权表(Grant Table)机制。每个 Domain 都有一个授权表,用以指明其内部哪些
页面可以被哪些 Domain 所访问。而 Xen 内部存在一个活动授权表 (Active Grant
Table)用于缓存来自各 Domain 授权表的活动表项内容。
当 DomU 中的 Guest OS 需要进行 DMA 操作时,前端驱动会为对应的数据页面生
成一个授权描述(Grant Reference, GR)并将授权描述和请求一起放入 I/O 环。当
Dom0(IDD)从 I/O 环中取出请求时,将根据授权描述,向 Xen 请求锁定该页面。
Xen 接收到请求 后,在活动授权表或 Guest OS 的授权表中确认是否已授权特权域
访问该页面,通过检查后,表明该页面可安全地进行 DMA 操作。Dom0(IDD)
在接收到 Xen 的响应后即可开始向真 实硬件发送 DMA 请求了。
其他虚拟化产品
1.VMware VI(Virtual Infrastructure)
其实 VMware VI 不是一款服务器虚拟化软件,而是一组服务器虚拟化软件的组合
包,具体包括了:
VMware ESX Server:用于虚拟化服务器、存储和网络的平台。
VMware VMFS(Virtual Machine File System):用于存储虚拟化的高性能群集文
件系统。
VMware Virtual SMP:为虚拟机提供多处理器支持。
VMware VirtualCenter:为 IT 基础架构提供集中化管理、操作自动化和优化。
VMware High Availability(HA):为虚拟机提供经济高效的高可用性。
VMware DRS(Distributed Resource Scheduler):为虚拟机提供动态平衡和资源分
配。
VMware VMotion:虚拟机实时迁移且服务不中断。
VMware Consolidated Backup:用于虚拟机的集中式备份软件。
VMware ESX Server 采用半虚拟化技术,可直接将其安装到服务器裸机上,并配置
虚拟机,而无需宿主操作系统。VMware ESX Server 将每个虚拟机与服务器硬件和
其他虚拟机进行隔离,以确保单个虚拟机崩溃不会影响到其他虚拟机,应用程序只
能通过配置的网络连接进行通信。 VMware ESX Server 将虚拟机环境封装为一组
文件,以便于备份、移动和复制。
VMware ESX Server 将物理机器的资源分离出来形成一个逻辑的资源池,并负责按
需将系统资源分配给虚拟机使用,并确保服务器资源能被远程管理、自动预制和标
准化。 ESX Server 提供了过量使用内存的功能,即虚拟机的内存总和可以安全地
超越服务器的物理内存总量,该特性可提高服务器内存的整体利用效率。
2.微软 Hyper-V
微软的 Windows Server 2008 是一个原生架构的虚拟机产品,可直接控制硬件资源,
其中的 Hypervisor 部分被称为 Hyper-V。Hyper-V 在 Windows Server 2008 中仅是一
个服务器角色,但其功能几乎涵盖了 VMware ESX 的所有功能范围,直接挑战
VMware 的行业霸主地位。
Hyper-V 的系统架构如图 7-28 所示。其中的每个分区都代表了一台虚拟机,父分
区必须运行 Windows Server 2008,其中包含了一个虚拟化堆栈,该堆栈包括了管
理工具和自动操作组件(如 WMI 界面)。每个子分区可以运行各自的子操作系统。
所有的操作系统都必须 运行在分区中。
子分区和父分区之间的通信主要通过 VMBus 进行,VMBus 使用共享内存在同一主
机服务器上与虚拟机进行安全通信。
Hyper-V 采用了微内核架构,使得 Hypervisor 本身很小(只有 300k 左右),只有
少量的程序运行在具有特权的 Hypervisor 层次上,也可保证系统整体更安全,系统
的稳定性也得以大幅提高。
(点击查看大图)图 7-28 Hyper-V 架构图
Hyper-V 采用了 VSP/VSC 架构,其中 VSP 是虚拟化服务提供方,运行在宿主操作
系统之上,而 VSC 是虚拟化服务客户端,运行在虚拟机操作 系统之上,两者之间
将通过 VMBus 组件进行连接。位于子分区的应用程序发出 I/O 操作请求后,将通
过本地虚拟机操作系统平台的 I/O 堆栈,调用虚拟的设 备驱动(VSC)。VSC 接
收到 I/O 请求后,通过 VMBus 将请求转发到父分区的对应 VSP,VSP 对操作请求
进行验证和处理后,最终通过本地的 I/O 堆栈和硬件设备驱动访问物理设备完成操
作。
Hyper-V 可支持 4 CPU 的 Windows Server 2008 虚拟机和 2 CPU 的 Windows Server
2003 虚拟机。当然该特性并非 Hyper-V 所独有。多处理器虚拟机可支持更高的工
作负载,但管理更多的处理器也将带来额外的处理负荷,因而应该按需使 用多处
理器虚拟机。