代码改变世界

Xen工作原理

2012-03-07 15:21  debugger87  阅读(2662)  评论(0编辑  收藏  举报

 

执行摘要

本文档涵盖了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