小结:
这个文档是从高层次分析Xen hypervisor的整体架构以及相关工具和应用程序。这个架构是基于2008年2月发布的Xen3.2版本。该文档是Xen架构的简介,更多信息请参考Xen books。
Xen组成部分
Xen虚拟环境由以下几个组成部分:
Xen Hypervisor Xen管理程序
Domain 0 域0
Domain Management and Control(Xen DM&C) 域管理控制程序
Domain U(Dom U) PV Guest 域U半虚拟化客户
Domain U(Dom U)HVM Guest 域U全虚拟化客户
下图是Xen的架构
Xen Hypervisor Xen管理程序
Xen Hypervisor是软件的抽象底层,位于硬件和操作系统之间。它负责管理各个虚拟机的CPU时间分配和内存分配。由于管理程序和上层虚拟机共享进程环境,所以管理程序不仅向虚拟机抽象出底层的硬件,还对上层虚拟机进行控制,它不负责网络,硬盘,音频或者其他IO功能。
域0
域0,基于修改过的linux内核,它是一个运行在Xen Hypervisor上的虚拟机,它具有访问物理IO资源的权限,并能同其他的虚拟机( Domain U:PV HVM Guests )进行交互。域0启动后,通过域0来启动其他虚拟机。
域0中带有(Network backend Driver)网络后端驱动和(block Backend Driver)块设备后端驱动,通过驱动可以访问网络和硬盘,其他虚拟机可以通过域0使用网络和硬盘资源(如下图)。网络后端驱动直接和网卡通信,处理其他虚拟机发送过来的任务。块设备后端驱动根据其他虚拟机的需求读写硬盘。
域U
Xen Hypervisor上运行的半虚拟化的机器叫做PV客户机,可以运行修改过的linux操作系统,如Solaris、FreeBSD。Xen hypervisor上运行的全虚拟化机器叫做HVM客户机,可以运行Windows或者其他未修改过的操作系统。
PV虚拟客户机不直接访问硬件,可以识别运行在同一机器上的其他虚拟机。HVM虚拟客户机可直接访问硬件,通其他HVM虚拟机共享CPU处理时间。PV虚拟客户机的网络和硬盘驱动分别是PV Network Driver和PV Block Driver。
HVM虚拟客户机没有PV虚拟客户机的那两个驱动,它由域0给分配一个进程,叫Qemu-dm。Qemu-dm可以支持HVM虚拟客户机使用网络的硬盘资源。由于Xen用来模拟BIOS的虚拟固件要作为软件加载HVM虚拟客户机的底层,所以HVM虚拟客户机需要这样的要求进行初始化。
域管理控制一些Xen相关的进程统称域管理控制进程。这些进程在域0虚拟机中,用于管理和控制整个虚拟环境。下图阐述了域0外的进程和域0的关系,可以清楚的理解整体架构。
Xend
Xend是基于Python语言的用于管理xen环境的进程。它通过libxenctrl库来访问xen hypervisor,所有要求xend处理的请求都由xm工具通过XML RPC接口发送给xend。
XM
XM命令工具接受用户的输入,通过XML RPC发送给xend。
Xenstored
Xenstored进程包含内存、域0和其他虚拟机之间的事件链接的注册信息,域0虚拟机通过这些注册信息同系统内的其他虚拟机建立通信频道。
Libxenctrl
Libxenctrl是一个c库,用来支持xend通过域0同xen hypervisor之间的通信。域0中有个特别的驱动,用来向xen hypervisor发送请求。
Qemu-dm
Xen环境中的每个HVM虚拟客户机需要有自己的Qemu进程,这个进程用来处理HVM虚拟客户集中所有的网络和硬盘请求,实现全虚拟化。由于Qemu要直接访问网络和IO口,所以它位于xen hypervisor的外面,也就是存在于域0中。
一个叫做Stub-dm的新工具已经在开发中,采用Stub-dm之后,不用再每个HVM虚拟客户机中都建立一个Qemu,Stub-dm可以给HVM虚拟客户机提供服务。Xen 3.3以后的版本会包含这个工具。
Xen 虚拟固件
Xen虚拟固件时虚拟BIOS,插入每个HVM虚拟客户机,保证他们的操作系统在正常启动时能得到启动所需的所有标准指令。
Xen操作
这部分阐明一个半虚拟化的客户机如何通过域0和xen hypervisor访问网络和存储设备。
域0和域U通信
前面提到过,xen hypervisor没有支持网络和硬盘的驱动,所以域U必须通过xen hypervisor同域0通讯,进而完成网络和硬盘操作。下面的例子是PV虚拟客户机想硬盘中写入数据的过程。
PV虚拟客户机的PV块设备驱动收到一个像本地磁盘中写入数据的请求,它先通过xen hypervisor将数据写入内存的合适位置(PV虚拟客户机和域0共享内存),域0和域U之间的事件信道,允许他们通过xen hypervisor进行域间的异步中断。域0收到xen hypervisor发来的中断,中断使得PV后端块设备驱动到域0和域U共享内存中读取合适的数据,内存中的数据通过域0写入硬盘。
事件信道如下图所示,图中域0和域U之间的直接连接表示事件信道。实际上,事件信道要通过xen hypervisor使用xenstored中注册过的特定中断来实现域0和域U之间通过本地内存进行数据共享。
图示详细的说明了整个过程。
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