进入开源虚拟机 XEN 的世界

IBMdW 发布于 2011/06/10 09:50
阅读 1K+
收藏 14
Xen

XEN 的发展与现状

XEN 最初是作为剑桥大学的一个项目,目前 XEN.ORG 社区在负责它的开发及维护,它已经在开源社区中得到了极大的发展。XEN 是一种直接运行在硬件上一层软件,它可以让电脑硬件上同时跑多个用户的操作系统。由于对 x86, x86-64, Itanium, Power PC, 和 ARM 这些处理器的支持,所以 XEN 管理工具可以支持的操作系统有 Linux, NetBSD,FreeBSD,Solaris, Windows 和其他一些运行在 XEN 上的正常的操作系统。如图 1 所示 XEN 在系统中的位置:


图 1. XEN 在系统的位置
图 1. XEN 在系统的位置

Xen 目前具有以下几种产品:

  • Xen Hypervisor —— 后面会详细讲解,在此不作赘述。会导致转换有问题;
  • XCI —— 种嵌入式管理工具,基于 Xen Hypervisor 的基础之上修改而来,相对于标准的 Xen Hypervisor,它使用的库更小,目前主要用在笔记本以及一些移动设备上,可以使用 Intel 或者 AMD 的架构;
  • Xen Cloud Platform —— 目前它为 ISVs 和服务提供商提供了一套基于强大的管理栈的云架构平台,这个栈是基于开放的标准 API;
  • 还有一些 Xen.org 上的项目,再此就不一一列举了。

XEN 的安装与使用

在本例中我们安装的是 Fedora13,其中主要步骤内容都是按照 Xen 官网中的安装步骤翻译来得,也是我实际安装过程中使用的步骤。需要注意的是,在进行的分区的时候,给 /boot 目录分配至少 2GB 大小,选择类型为 ext3。然后再创建一个 LVM PV( 物理卷 ),并且在其上创建 LVM Volume 组,之后在 LVM Volume Group 上创建根目录 /root,分配大小至少 40G,选择类型为 ext4,再创建一个 swap 分区。对于 LVM volume group 安装需要注意的是必须预留足够多的空余空间来安装客户的虚拟机。下面是一个 F13 安装过程中分区的一个截屏。


图 2. F13 安装过程中分区截屏
图 2. F13 安装过程中分区截屏

安装完成后我们需要进行一些相关的配置,当我们以 root 用户登陆的时候,我们可以通过以下命令让网络在系统启动的时候被自动 enable。


清单 1. 配置系统自动启动网络服务
				
 # chkconfig network on 
 # /etc/init.d/network start 

当你的网络已经启动好了,你就可以用 ssh 来远程设置网络环境,例如通过使用 ifconfig 来设置相关 ip 地址等等。网络配置完成后,我们就可以在线安装一些常用的工具。


清单 2. 安装常用工具
				
 # yum install screen vim wget tcpdump ntp ntpdate man smartmontools ethtool 

编辑“/boot/grub/grub.conf”和修改“timeout=10”,注释掉 hiddenmenu 这一行,修改后大概就如下所示:


清单 3. 修改后的 grub.conf 信息
				
 # grub.conf generated by anaconda 
 # 
 # Note that you do not have to rerun grub after making changes to this file 
 # NOTICE:  You have a /boot partition.  This means that 
 #          all kernel and initrd paths are relative to /boot/, eg. 
 #          root (hd0,0) 
 #          kernel /vmlinuz-version ro root=/dev/mapper/vg_f13-lvroot 
 #          initrd /initrd-[generic-]version.img 
 #boot=/dev/sda 
 default=0 
 timeout=10 
 splashimage=(hd0,0)/grub/splash.xpm.gz 
 #hiddenmenu 
 title Fedora (2.6.33.3-85.fc13.x86_64) 
        root (hd0,0) 
        kernel /vmlinuz-2.6.33.3-85.fc13.x86_64 ro 
        root=/dev/mapper/vg_f13-lvroot rd_LVM_
        LV=vg_f13/lvroot rd_LVM_LV=vg_f13/lvswap rd_NO_LUKS rd_NO_MD rd_NO_DM 
        LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=fi rhgb quiet 
        initrd /initramfs-2.6.33.3-85.fc13.x86_64.img 

修改过后,我们就可以选择相关内核进行启动了,再这之前我们先把 selinux 关掉,因为这个过于严格了。编辑“/etc/selinux/config” disable 掉这个选项。


清单 4. 修改过的 selinux 配置文件
				
 # This file controls the state of SELinux on the system. 
 # SELINUX= can take one of these three values: 
 #     enforcing - SELinux security policy is enforced. 
 #     permissive - SELinux prints warnings instead of enforcing. 
 #     disabled - No SELinux policy is loaded. 
 SELINUX=disabled 
 # SELINUXTYPE= can take one of these two values: 
 #     targeted - Targeted processes are protected, 
 #     mls - Multi Level Security protection. 
 SELINUXTYPE=targeted 

安装 xorg-x11-xauth,这样我们就可以在 ssh 中使用 x11.


清单 5. 安装 xorg-11-xauth
				
 # yum install xorg-x11-xauth 

所有的设置以及配置完成后,重启系统进行 Xen4.0 的安装。先安装一些相关的开发工具及相关的 Libraries。


清单 6. 安装相关开发工具及 Libraries
				
 # yum groupinstall "Development Libraries"
 # yum groupinstall "Development Tools"

接着安装一些额外的包,主要是用于 build Xen 和运行时需要用到的。


清单 7. 安装 build Xen 用到的额外包
				
 # yum install transfig wget texi2html libaio-devel \
 dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel \
 bzip2-devel pciutils-libs pciutils-devel SDL-devel \
 libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial 

再安装一些 32bit 版本的 glibc-devel。


清单 8. 安装 glibc-devel
				
 # yum install glibc-devel.i686 

完成这些相关的包安装过后我们就可以接着进行。从 src.rpm 源码包 build 出 Xen 4.0.1 rpm 二进制安装包。你可以从 Fedora koji 或者任意的 Fedora14 FTP 镜像点 ftp://ftp.funet.fi/pub/mirrors/fedora.redhat.com/pub/fedora/linux/updates/testing/14/SRPMS/xen-4.0.1-6.fc14.src.rpm), or from: http://pasik.reaktio.net/fedora/xen-4.0.1-6.fc14.src.rpm . 获得 xen src.rpm 的源码包。


清单 9. 下载和安装 Xen 源码包
				
 # wget http://pasik.reaktio.net/fedora/xen-4.0.1-6.fc14.src.rpm 
 # rpm -i xen-4.0.1-6.fc14.src.rpm 

接着重新 build 源码包获得二进制包。


清单 10. build 源码包获得二进制安装包
				
 # cd /root/rpmbuild/SPECS 
 # rpmbuild -bb xen.spec 

在 build 完成之后你就会看到如下信息:


清单 11. build 完成后的显示信息
				
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-libs-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-runtime-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-hypervisor-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-doc-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-devel-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-licenses-4.0.1-6.fc13.x86_64.rpm 
 Wrote: /root/rpmbuild/RPMS/x86_64/xen-debuginfo-4.0.1-6.fc13.x86_64.rpm 

安装新 build 出来的 rpm 包:


清单 12. 安装新 build 出来的 rpm 包
				
 # cd /root/rpmbuild/RPMS/x86_64/ 
 # rpm -Uvh *4.0.1-6*.rpm 
 Preparing...                ########################################### [100%] 
   1:xen-licenses           ########################################### [ 13%] 
   2:xen-libs               ########################################### [ 25%] 
   3:xen-hypervisor         ########################################### [ 38%] 
   4:xen-runtime            ########################################### [ 50%] 
   5:xen                    ########################################### [ 63%] 
   6:xen-devel              ########################################### [ 75%] 
   7:xen-doc                ########################################### [ 88%] 
   8:xen-debuginfo          ########################################### [100%] 

下载或者编译 Linux 2.6.32.x 的 Xen dom0 kernel,从 xen.git 下载内核并且 checkout 下来 2.6.32.x 整个分支:


清单 13. 下载编译 Linux2.6.32.x 的 Xen-dom0-kernel
				
 # git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen 
 # cd linux-2.6-xen 
 # git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x 

接着可以用以下命令来 check 一下最新的分支更新:


清单 14. check 最新的分支更新
				
 # git log | less 

下载 2.6.32.x 内核的相关配置文件,也可以运行老的”oldconfig”来使配置文件与当前的内核版本兼容:


清单 15. 下载配置文件并运行配置命令
				
 # wget -O .config http://pasik.reaktio.net/xen/pv_ops-dom0-debug/ \
 config-2.6.32.25-pvops-dom0-xen-stable-x86_64 
 # make oldconfig 

接下来就可以 build 内核了,将以下命令中的“-j4”中的 4 替换成你当前机器中的物理 cpu 个数,以此来加快速度。


清单 16. build 内核
				
 # make clean 
 # make -j4 bzImage && make -j4 modules 

成功编译后,我们就可以安装内核模块和内核了,在这个例子中我们假设内核的版本是 2.6.32.25。


清单 17. 安装内核模块及内核
				
 # make modules_install 
 # depmod -a 2.6.32.25 
 # cp -a arch/x86/boot/bzImage /boot/vmlinuz-2.6.32.25 
 # cp -a System.map /boot/System.map-2.6.32.25 
 # cp -a .config /boot/config-2.6.32.25 
 # cd /boot 
 # dracut initramfs-2.6.32.25.img 2.6.32.25 

在用 dracut 的时候,可能有一些警告信息,dracut 也需要运行一小段时间,不过这无所谓。下例显示 dracut 的执行。


清单 18. dracut 运行显示
				
 [root@f13 boot]# dracut initramfs-2.6.32.25.img 2.6.32.25 
 grep: /usr/share/plymouth/themes/.plymouth/.plymouth.plymouth: No such file or directory 
 The default plymouth plugin () doesn't exist 
 [root@f13 boot]# 

准备重启进入 Xen。重新设置一个新的 grub 入口来用 dom0 kernel 启动 Xen hypervisor,编辑“/boot/grub/grub.conf”,编译后内容大概如下所示:


清单 19. 重新编辑后的 grub.conf
				
 # grub.conf generated by anaconda 
 # 
 # Note that you do not have to rerun grub after making changes to this file 
 # NOTICE:  You have a /boot partition.  This means that 
 #          all kernel and initrd paths are relative to /boot/, eg. 
 #          root (hd0,0) 
 #          kernel /vmlinuz-version ro root=/dev/mapper/vg_f13-lvroot 
 #          initrd /initrd-[generic-]version.img 
 #boot=/dev/sda 
 default=0 
 timeout=10 
 splashimage=(hd0,0)/grub/splash.xpm.gz 
 #hiddenmenu 
 title Fedora (2.6.33.6-147.2.4.fc13.x86_64) 
        root (hd0,0) 
        kernel /vmlinuz-2.6.33.6-147.2.4.fc13.x86_64 ro 
        root=/dev/mapper/vg_f13-lvroot rd_LVM_LV=vg_f13/lvroot 
        rd_LVM_LV=vg_f13/lvswap rd_NO_LUKS rd_NO_MD rd_NO_DM 
        LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=fi rhgb quiet 
        initrd /initramfs-2.6.33.6-147.2.4.fc13.x86_64.img 
 title Fedora (2.6.33.3-85.fc13.x86_64) 
        root (hd0,0) 
        kernel /vmlinuz-2.6.33.3-85.fc13.x86_64 ro root=
        /dev/mapper/vg_f13-lvroot rd_LVM_LV=vg_f13/lvroot 
        rd_LVM_LV=vg_f13/lvswap rd_NO_LUKS rd_NO_MD rd_NO_DM 
        LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=fi rhgb quiet 
        initrd /initramfs-2.6.33.3-85.fc13.x86_64.img 
 title Fedora Xen 4.0 with Linux 2.6.32.25 pvops dom0 
        root (hd0,0) 
        kernel /xen.gz dom0_mem=1024M loglvl=all guest_loglvl=all 
        module /vmlinuz-2.6.32.25 ro root=/dev/mapper/vg_f13-lvroot nomodeset 
        module /initramfs-2.6.32.25.img 

需要注意的是其中参数 root=/dev/mapper/vg_f13 要与你实际的入口目录相一致。通过以下命令查看一些 Xen services/daemons 是否已经配置成自动启动。


清单 20. 查看 Xen services/daemons 是否启动
				
 # chkconfig --list | grep xen 
 xenconsoled     0:off   1:off   2:off   3:on    4:on    5:on    6:off 
 xend            0:off   1:off   2:off   3:on    4:on    5:on    6:off 
 xendomains      0:off   1:off   2:off   3:on    4:on    5:on    6:off 
 xenstored       0:off   1:off   2:off   3:on    4:on    5:on    6:off 

完成后,你就可以启动进入 Xen 了,进入 Xen 后,我们就可以查看一下各方面是否工作正常。


清单 21. 查看进入 Xen 后相关信息
				
 [root@f13 ~]# xm info 
 host              : f13.localdomain 
 release                : 2.6.32.25 
 version                : #3 SMP Sat Oct 30 15:24:53 EEST 2010 
 machine                : x86_64 
 nr_cpus                : 4 
 nr_nodes               : 1 
 cores_per_socket       : 4 
 threads_per_core       : 1 
 cpu_mhz                : 2826 
 hw_caps  : bfebfbff:20100800:00000000:00000940:0408e3fd:00000000:00000001:00000000 
 virt_caps              : hvm 
 total_memory           : 8190 
 free_memory            : 7076 
 node_to_cpu            : node0:0-3 
 node_to_memory         : node0:7076 
 node_to_dma32_mem      : node0:3259 
 max_node_id            : 0 
 xen_major              : 4 
 xen_minor              : 0 
 xen_extra              : .1 
 xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 
 xen_scheduler          : credit 
 xen_pagesize           : 4096 
 platform_params        : virt_start=0xffff800000000000 
 xen_changeset          : unavailable 
 xen_commandline        : dom0_mem=1024M loglvl=all guest_loglvl=all 
 cc_compiler            : gcc version 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC) 
 cc_compile_by          : root 
 cc_compile_domain      : 
 cc_compile_date        : Sat Oct 16 00:13:54 EEST 2010 
 xend_config_format     : 4 

 Xen domain(vm) list 
 # xm list 
 Name                                        ID   Mem VCPUs      State   Time(s) 
 Domain-0                                     0  1017     4     r-----     23.1 

上面的命令可以查看一下 Mem 是不是跟我们在 grub 中设置的值一样。再查看一下 Dom0 Linux kernel 的版本:


清单 22. 查看 Dom0 Linux kernel 的版本
				
 # uname -a 
 Linux f13.localdomain 2.6.32.25 #3 SMP Sat Oct 30 15:24:53 EEST 2010 
 x86_64 x86_64 x86_64 GNU/Linux 

接下来我们就可以通过命令行 virt-install 来安装新的 Xen guests。首先使用一下命令来查看一下剩余的空间:


清单 23. 查看 LVM 中剩余空间
				
 [root@f13 ~]# vgdisplay 
  --- Volume group --- 
  VG Name               vg_f13 
  System ID 
  Format                lvm2 
  Metadata Areas        1 
  Metadata Sequence No  4 
  VG Access             read/write 
  VG Status             resizable 
  MAX LV                0 
  Cur LV                3 
  Open LV               2 
  Max PV                0 
  Cur PV                1 
  Act PV                1 
  VG Size               463.75 GiB 
  PE Size               32.00 MiB 
  Total PE              14840 
  Alloc PE / Size       2944 / 92.00 GiB 
  Free  PE / Size       11896 / 371.75 GiB 
  VG UUID               5dsak7-VN89-zMFT-9ZiU-XGhY-s5is-u1vCUw 

接着使用如下命令来创建新的 LVM volume 来座位虚拟机的盘符,本例中我们创建的客户机使用的操作系统也用 f13。


清单 24. 创建客户机
				
 [root@f13 ~]# lvcreate -nf13 -L40G /dev/vg_f13 
  Logical volume "f13" created 

接下来我们就可以安装客户机了:


清单 25. 安装客户机
				
 [root@f13 ~]# virt-install -n f13 -r 768 --vcpus=1 -f /dev/vg_f13/f13 
 --vnc -p -l 
 "http://ftp.funet.fi/pub/mirrors/fedora.redhat.com/pub/
 fedora/linux/releases/13/Fedora/i386/os"
 Starting install... 
 Retrieving file .treeinfo...          | 2.8 kB     00:00 ... 
 Retrieving file vmlinuz-PAE...              | 6.7 MB     00:02 ... 
 Retrieving file initrd-PAE.img...       |  74 MB     00:01 ... 
 Creating domain...                    |    0 B     00:01 

弹出安装界面后,安装步骤与平时我们安装 Linux 系统相似。

XEN 与其他虚拟化工具的比较

XEN 与 VMware ESXi,Hyper-V 以及 KVM 特点比较:

    1. XEN 有简化虚拟模式,不需要设备驱动,能够保证每个虚拟用户系统相互独立,依赖于 service domains 来完成一些功能;
    2. Vmware ESXI 与 XEN 比较类似,包含设备驱动以及管理栈等基本要素,硬件支持依赖于 VMware 创建的驱动;
    3. Hyper-V 是基于 XEN 管理栈的修改;
    4. KVM 与 XEN 方式不同,KVM 是以 Linux 内核作为管理工具得。

虚拟机的体系结构

  1. XEN 体系结构

图 3. XEN 体系结构图
图 3. XEN 体系结构图

一个 XEN 虚拟机环境主要由以下几部分组成:

  • XEN Hypervisor;
  • Domain 0 —— Domain Management and Control(XEN DM&C);
  • Domain U Guest(Dom U)
        1. PV Guest
        2. HVM Guest

下图 4 显示除了各部分之间的关系:


图 4. Xen 三部分组成之间关系图
图 4. Xen 三部分组成之间关系图

XEN Hypervisor :

XEN Hypervisor 是介于操作系统和硬件之间的一个软件描述层。它负责在各个虚拟机之间进行 CPU 调度和内存分配。XEN Hypervisor 不仅抽象出虚拟机的硬件,同时还控制着各个虚拟机的执行。XEN Hypervisor 不会处理网络、存储设备、视频以及其他 I/O.

Domain 0:

Domain 0 是一个修改过的 Linux kernel,是唯一运行在 Xen Hypervisor 之上的虚拟机,它拥有访问物理 I/O 资源的权限,同时和系统上运行的其他虚拟机进行交互。Domain 0 需要在其它 Domain 启动之前启动。

Domain U:

运行在 Xen Hypervisor 上的所有半虚拟化(paravirtualized)虚拟机被称为“Domain U PV Guests”,其上运行着被修改过内核的操作系统,如 Linux、Solaris、FreeBSD 等其它 UNIX 操作系统。所有的全虚拟化虚拟机被称为“Domain U HVM Guests”,其上运行着不用修改内核的操作系统,如 Windows 等。

2.Hyper-V 体系结构


图 5. Hyper-V 体系结构图
图 5. Hyper-V 体系结构图

Hyper-V 是微软提出的一种系统管理程序虚拟化技术,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V 底层的 Hypervisor 运行在最高的特权级别下,微软将其称为 ring -1(而 Intel 则将其称为 root mode),而虚机的 OS 内核和驱动运行在 ring 0,应用程序运行在 ring 3 下,这种架构就不需要采用复杂的 BT(二进制特权指令翻译)技术,可以进一步提高安全性。从架构上讲 Hyper-V 只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机 系统性能更接近真实系统性能。

Hyper-V 支持分区层面的隔离。分区是逻辑隔离单位,受虚拟机监控程序支持,并且操作系统在其中执行。Microsoft 虚拟机监控程序必须至少有一个父 / 根分区,用于运行 64 位版本的 Windows Server 2008 操作系统。虚拟化堆栈在父分区中运行,并且可以直接访问硬件设备。随后,根分区会创建子分区用于承载来宾操作系统。根分区使用虚拟化调用应用程序编程接口 (API) 来创建子分区。

分区对物理处理器没有访问权限,也不能处理处理器中断。相反,它们具有处理器的虚拟视图,并运行于每个来宾分区专用的虚拟内存地址区域。虚拟 机监控程序负责处理处理器中断,并将其重定向到相应的分区。Hyper-V 还可以通过输入输出内存管理单元 (IOMMU) 利用硬件加速来加快各个来宾虚拟地址空间相互之间的地址转换。IOMMU 独立于 CPU 使用的内存管理硬件运行,并用于将物理内存地址重新映射到子分区使用的地址。从系统的结构图,我们可以看出来 Hyper-V 与 Xen 的架构很相似。

        1. Vmware ESXI 体系结构

图 6. Vmware ESXI 体系结构图
图 6. Vmware ESXI 体系结构图

由上图我们可以看出来管理工具也是直接嵌入到了 ESXi vmKernel 中,没有再分化出单独的管理工具,这一点与 Xen 是相区别的。

        1. KVM 体系结构

图 7. KVM 体系结构图
图 7. KVM 体系结构图

KVM 是一个独特的管理程序,通过将 KVM 作为一个内核模块实现,在虚拟环境下 Linux 内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。在这种模式下,每个虚拟机都是一个常规的 Linux 进程,通过 Linux 调度程序进行调度。

通过以上四种虚拟机的体系结构图,我们可以看出他们在整个系统中的位置,以及相互之间的区别。

XEN 工作原理

上面我们针对 Xen 的体系结构进行了简单的描述,我们知道 Xen 主要由 Xen Hypervisor,Domain0,DomainU 三部分组成。下面通过 Domain 0 与 Domain U 的通信以及这三部分的交互来探讨一下 Xen 的工作原理。

  • 之前我们已经提到过 Domain U 分为 PV 客户系统和 HVM 客户系统两种,我们首先讨论一下 PV 客户系统,也就是半虚拟化操作系统工作原理。

首先我们需要知道在 Domain 0 中有两个驱动 Network Backend Driver 和 Block Backend Driver,它们分别用来处理来自 Domain U 的网络和本地磁盘请求。由于 Xen Hypervisor 不会支持网络和磁盘请求的,因此一个 PV(半虚拟化)客户系统必须通过和 Xen Hypervisor、Domain 0 通信,从而来实现网络和磁盘请求。由于 Xen 文档中已经探讨过 PV 客户系统如何将一个数据写到本地硬盘,下面我们就来讨论一下 PV 客户系统如何将一个数据发送到网络中去。在这之前我们首先要了解到一点,那就是 Domain U PV Guest 中也包括两个驱动“PV Network Driver”和“PV Block Driver”,它们分别也是用来处理发送网络和本地磁盘请求用的,这与 Domain 0 中的两个驱动是相对应的。

当一个 PV 客户系统的网络设备驱动程序接收到一个发送数据请求的时候,并且通过 Xen Hypervisor 发送数据到本地网络设备(网卡之类的设备)中,这个网络设备是和 Domain 0 共享的。在 Domain 0 和 Domain U 之间存在一个事件通道(event channel),通过该通道二者进行异步的域间中断通信。Domain 0 会接收到一个来自 Xen Hypervisor 的中断,触发 PV Network Backend Driver 访问上述网络设备,读取来自 PV 客户系统的数据,然后将这些数据发送出去。

下图中事件通道表示为连接 Domain 0 与 Domain U 的一个区域,这是系统工作流的一个简化。事实上事件通道运行在 Xen Hypervisor 中,通过 Xenstored(Xenstored 维护一个信息档案,包括内存和建立在 Domain 0 与 Domain U 之间的事件通道。Domain 0 通过改变这个档案来设置和其他虚拟机的设备通道)中的特定中断实现,提供 Domain 0 与 Domain U 之间的快速共享网络设备,见图 8。


图 8. Domain 0 与 Domain U PV Guest 通信示意图
图 8. Domain 0 与 Domain U PV Guest 通信示意图
  • 上面我们已经分析了 PV 客户系统的工作原理,下面我们再简要的介绍一下 HVM 客户系统的工作原理。

由于一个 HVM Guests 虚拟机中没有上面提到得 PV driver,所以 Xen 在 Domain 0 中为每一个 HVM Guest 都启动一个守护进程 Qemu-dm 处理来自客户系统的网络和磁盘请求,所以当一个 HVM Guest 有相应的网络和 I/O 请求的时候,它就会直接与 Domain0 中和它相对应的 Qemu-dm 来进行交互,通过 Domain 0 最终达到访问网络设备或者磁盘的目的。见下图 9:


图 9. Domain 0 与 Domain U HVM Guest 通信示意图

图 9. Domain 0 与 Domain U HVM Guest 通信示意图

结束语

通过这一部分的介绍,我们了解了 Xen 目前的发展及现状,另外我们详细的说明了如何在 Fedora13 下安装 Xen,以及 Xen 下一些基本操作,再这之后我们又讨论了一下 Xen 与 VMware ESXi,Hyper-V 以及 KVM 异同点,最后我们通过示例来讲解了一下 Xen 的工作原理。本系列的第二部分我们将阐述如何搭建 Xen 的开发环境、Xen 下开发需要具备的相关技术以及 Xen 下的如何利用 XenAPI 做开发,最后通过一个例子来演示。

以下是话题补充:

@东dong:不错的资料,可以看看! (2013/07/22 10:02)
加载中
返回顶部
顶部