执行摘要
本文档涵盖了Xen Hypervisor的高层架构概要视图,及其用于支持完整虚拟环境的相关工具和应用。
该架构文档基于Xen 3.4 发行版,仅仅介绍了Xen的整体架构。更多的完整架构描述,请参考http://wiki.xensource.com/xenwiki/Books。
Xen虚拟环境组件
Xen虚拟环境由若干协同工作的组件组成,从用户角度看,其包括:
Xen Hypervisor
Domain0 Guest
Domain Management and Control(Xen DM&C)
DomainU Guest(Dom U)
PV Guest
HVM Guest
这些组件的基本组织如下图:
Xen Hypervisor
Xen Hypervisor是一个基本的软件抽象层,其位于硬件之上,操作系统之下。它负责cpu的调度,并为每个运行
于硬件之上的虚拟机划分内存空间。监视器(Xen hypervisor)为虚拟机提供硬件抽象,与此同时,由于各个虚
拟机分享共同的运行环境,监视器还需要控制虚拟机的运行。监视器对网络、外存设备、视频、或者其他可以在
计算机系统中见到的I/O功能一无所知。
Domain 0
Domain 0是一个虚拟机。它是修改过的linux 内核,其运行在Xen hypervisor之上,拥有访问物理I/O资源的特
殊权限,并且和其他虚拟机(Domain U:PV and HVM Guests)进行通信。需要指出一点,Domain 0是唯一的。
Xen完整虚拟环境的构建要求Domain 0在其他虚拟机能够启动之前运行起来。
在Domain 0中,包含两个驱动:Network Backend Driver 和 Block Backend Driver。这两个驱动可以支持来
自于Domain U的网络与本地磁盘访问请求。Network Backend Driver与本地网络硬件直接通信,以此处理来自
于Domain U所有虚拟机访问网络设备的请求。Block Backend Driver与本地存储设备进行通信,以此完成来自于
Domain U的磁盘数据读写请求。
Domain U
DomainU 没有直接访问物理硬件的权限,但Domain 0有。此外,DomainU通常被看作是没有直接读写I/O权限的(
DomainU中的“U”来自于英文单词unprivileged)。所有运行在Xen hypervisor之上的平行虚拟化机器都被看作是
Domain U PV Guests。同时,其操作系统为修改过的linux,比如Solaris,FreeBSD,以及其他UNIX操作系统。
所有运行于Xen hypervisor之上的完全虚拟化机器都被看作是Domain U HVM Guests。同时,其操作系统为标准的
windows或者其他未作修改的操作系统。
Domain U PV Guest 虚拟机能够知晓自己没有直接访问硬件的权限,也能知道其他虚拟机也运行在同一个物理机器上。
与此相反的是,Domain U HVM 虚拟机并不知道它正和其他虚拟机在同一个物理机器上分享处理器,也不知道其他虚拟
机正在运行。
Domain U PV Guest虚拟机包含两个驱动:PV NetworkDriver和PV Block Driver,其用于处理网络和磁盘访问。
Domain U HVM Guest 虚拟机虽然没有PV drivers,但Domain 0却为它们启动了一个特殊的Qemu-dm镜像。
Qemu-dm支持Domain U HVM Guest对网络和磁盘的访问请求。
Domain U HVM Guest在初始化时必须尽可能地添加一个软件Xen virtual firmware,该软件用于模拟操作系统
启动之前所需的BIOS。更多有关Xen virtual firmware的信息请参考后续章节。
Domain Management and Control
开源社区把一系列linux守护进程划分为域管理和控制工具。这些守护进程存在于Domain 0虚拟机,它们用于支持
整个虚拟环境的管理和控制。下面的图表展示了Domain 0中的守护进程。通过这个图表,可以对整个架构有更清
晰的理解。
Xend
Xend守护进程是一个Python应用程序,它被看作Xen虚拟环境的系统管理器。Xend利用Libxenctrl获得对Xen
hypervisor的访问请求。所有需要被Xend处理的请求都通过一个Xm工具的XML RPC接口被发送到Xend。
Xm
Xm是一个命令行工具,它获取用户输入,并把这些输入的命令通过XML RPC传输到Xend。
Xenstored
Xenstored守护进程维护一个信息注册表,这些信息涉及内存、Domain 0与所有其他Domain U Guests之间的
事件通道链。Domain 0虚拟机利用这个注册表来设置与其他虚拟机之间的设备通道。(更多的细节信息,请参看
Domain 0 to Domain U Communication章节)
Libxencrl
Libxenctrl是一个C程序库,它使得Xend可以通过Domain 0访问Xen hypervisor。privcmd是Domain 0中有一
个特殊的驱动,它将Xend的访问请求转发给hypervisor。
Qemu-dm
每个运行在Xen虚拟环境中得HVM Guest虚拟机需要它们自己的Qemu守护进程。这个工具处理所有来自于
Domain U HVM Guest虚拟机的网络与磁盘访问请求,使得完全虚拟化在Xen系统环境中得以实现。Qemu
需要访问网络和I/O设备,所有它必须处于Xen hypervisor之外。正因为如此,Qemu处于Domain 0虚拟机中。
Stub-dm是一个新工具。它使得Xen未来的版本不需要为么一个Domain U HVM运行Qemu,而是为每个
Domain U HVM提供一个可用的服务程序集。这个特性在Xen 3.2版本中还不可使用,但目前已经是
Xen-unstable版本的一部分。此外,Xen 3.3版本将会发布该特性。
Xen Virtual Firmware
Xen Virtual Firmware是一个被嵌入到Domain U HVM Guest中的虚拟BIOS,它使操作系统接收其正常引导
过程所需要的标准启动指令,以得到一个PC兼容的软件环境。
Xen Operation
本章描述了并行虚拟化的Domain U虚拟机如何通过Xen hypervisor和Domain 0虚拟机完成与外部网络或存储
设备的通信。
Domain 0 to Domain U Communication
较早一段时期,Xen hypervisor并不支持网络和磁盘访问请求。因此,Domain U PV Guest必须通过Xen
hypervisor与Domain 0通信以完成网络或磁盘访问请求。下面的例子描述了Domain U PV Guest 如何往
本地磁盘写数据。
Domain U PV Guest虚拟机中的PV block driver接收往磁盘写数据的请求,然后通过Xen hypervisor将数
据存放到本地内存中的某个适当的区域。需要指出的是,该内存区域由该Domain U PV Guest虚拟机与
Domain 0共享。在Xen hypervisor中,存在异步域间中断,位于Domain 0和Domain U PV Guest之间的
事件通道允许Domain 0和Domain U PV Guest可以通过该异步域间中断完成通信。Domain 0会收到一个来
自Xen hypervisor的中断请求,该中断请求会导致PV Block Backend Driver访问本地系统内存并从
Domain U PV Guest虚拟机的共享内存中读取适当的数据块。然后,共享内存中的数据将被写到本地硬盘的某
个特定位置。
下图中,Domain 0和Domain U PV Guest之间的事件通道链接简要地展示了系统工作原理。实际上,事件通道
使用在Xenstored中注册的特殊中断处理程序,运行在Xen hypervisor之上。这些特殊中断处理程序允许
Domain 0和Domain U PV Guest通过本地内存快速地共享信息。
下面的图展示了之前所描述的系统业务。
Xen PCI Passthru
为了提高整体性能,减轻Domain 0的负担,Xen设计了PCI Passthru这样一个新特性。PCI Passthru允许
Domain U Guest拥有直接访问本地硬件的权限,而不是通过Domain 0来访问硬件。下图描述了这个特性是
如何工作的:
Domain U Guest拥有直接同特殊硬件对话的权利,而不是之前那种使用Frontend 和Backend drivers的方法。
Glossary
C: http://www.cprogramming.com/; a computer programming language
Daemons: http://en.wikipedia.org/wiki/Daemon_(computer_software); a program
running in the background rather than under direct control of a user
Driver: http://en.wikipedia.org/wiki/Device_driver; program allowing software to
interact with hardware
Full Virtualization: http://en.wikipedia.org/wiki/Full_virtualization; a virtual machine not aware of its virtualization
Interrupt: http://en.wikipedia.org/wiki/Interrupt; signal from hardware to software
requesting a specific action in software
Kernel: http://en.wikipedia.org/wiki/Linux_kernel; the central component of a computer operating system
Paravirtualized: http://en.wikipedia.org/wiki/Paravirtualization; virtual machine running on a hypervisor that is aware of it being virtualized]
Python: http://www.python.org/; a dynamic object oriented programming language
ROM BIOS: http://en.wikipedia.org/wiki/BIOS; software instructions run on a machine when turned on
XML PRC: http://www.xmlrpc.com/; method for an application to leverage another
application using HTTP for the remote procedure call and XML as the encoding
PS:本文译自http://xen.org/files/Marketing/HowDoesXenWork.pdf