Linux江湖22:虚拟机体验之Xen篇——令人脑洞大开的奇异架构

  这一篇我要体验的虚拟机系统是Xen。在虚拟机领域,Xen具有非常高的知名度,其名字经常在各类文章中出现。同时Xen也具有非常高的难度,别说玩转,就算仅仅只是理解它,都不是那么容易。之所以如此,那是因为Xen采用了和我前面介绍的那几个虚拟机完全不同的架构。在这里,我称之为令人脑洞大开的奇异架构。

  比如说在经典的虚拟机架构中,虚拟机软件运行于Host System之中,而Guest System运行于虚拟机软件之中。为了提高Guest System的运行速度,虚拟机软件一般会在Host System中使用内核模块开一个洞,将Guest System的运行指令直接映射到物理硬件上。但是在Xen中,则根本没有Host System的概念,传说它所有的虚拟机都直接运行于硬件之上,虚拟机运行的效率非常的高,虚拟机之间的隔离性非常的好。

  当然,传说只是传说。我刚开始也是很纳闷,怎么可能让所有的虚拟机都直接运行于硬件之上。后来我终于知道,这只是一个噱头。虚拟机和硬件之间,还是有一个管理层的,那就是Xen Hypervisor。当然Xen Hypervisor的功能毕竟是有限的,怎么样它也比不上一个操作系统,因此,在Xen Hypervisor上运行的虚拟机中,有一个虚拟机是具有特权的,它称之为Domain 0,而其它的虚拟机都称之为Domain U。

  Xen的架构如下图:

  从图中可以看出,Xen虚拟机架构中没有Host System,在硬件层之上是薄薄的一层Xen Hypervisor,在这之上就是各个虚拟机了,没有Host System,只有Domain 0,而Guest System都是Domain U,不管是Domain 0还是Domain U,都是虚拟机,都是被虚拟机软件管理的对象。

  既然Domain 0也是一个虚拟机,也是被管理的对象,所以可以给它分配很少的资源,然后将其余的资源公平地分配到其它的Domain。但是很奇怪的是,所有的虚拟机管理软件其实都是运行在这个Domain 0中的。同时,如果要连接到其它Guest System的控制台,而又不是使用远程桌面(VNC)的话,这些控制台也是显示在Domian 0中的。所以说,这是一个奇异的架构,是一个让人很不容易理解的架构。

  这种架构桌面用户不喜欢,因为Host System变成了Domain 0,本来应该掌控所有资源的主操作系统变成了一个受管理的虚拟机,本来用来打游戏、编程、聊天的主战场受到限制了,可能不能完全发挥硬件的性能了,还有可能运行不稳定了,自然会心里不爽。(Domain 0确实不能安装专用显卡驱动,确实会运行不稳定,这个后面会讲。)但是企业级用户喜欢,因为所有的Domain都是虚拟机,所以可以更加公平地分配资源,而且由于Domain U不再是运行于Domian 0里面的软件,而是和Domain 0平级的系统,这样即使Domain 0崩溃了,也不会影响到正在运行的Domain U。(真的不会有丝毫影响吗?我表示怀疑。)

  下面开始在Ubuntu系统中体验Xen。使用如下命令可以在Ubuntu的软件源中搜索和Xen相关的软件包以及安装Xen Hypervisor:

sudo aptitude search xen
sudo aptitude install xen-hypervisor-4.4-amd64

  传说在旧版本的Xen Hypervisor上只能运行经过修改过的Linux内核。但是在目前的版本中不存在该问题。我机器上的Ubuntu 14.10系统不经任何修改,就可以当成Domain 0中的系统运行。至于是否让该系统运行于Xen Hypervisor上,在启动时可以选择,如下图:

  通过查看Grub的配置文件,可以看到通过Xen虚拟机启动Ubuntu系统时,Grub先启动的是/boot/xen-4.4-amd64.gz,然后才把Linux内核以及initrd文件作为模块载入内存。也就是说,Grub启动Xen Hypervisor,然后Xen Hypervisor运行Domian 0。

  前面提到Host System一下子变成了Domain 0中的操作系统是让桌面用户比较不爽的事,这里详细论述。虽然说目前的Xen同时支持全虚拟化和半虚拟化,支持操作系统不经任何修改就运行于Xen虚拟机上(全虚拟),但是系统是否稳定还是和内核有很大关系的。比如说我在Ubuntu 14.04刚推出的那段时间,在Ubuntu 14.04中使用Xen是没有什么问题的,但是经过几次系统升级后,Xen就出问题了,没办法成功进入Domain 0中的Ubuntu 14.04。现在我用的是Ubuntu 14.10,已经升过好几次级了,目前使用Xen还是很稳定的。其次就是显卡驱动的问题,我的Ubuntu当主系统用时,使用的是NVIDIA的显卡驱动,但是当Ubuntu运行于Domain 0中时,就不能使用NVIDIA的显卡驱动了,否则无法进入图形界面。

  下面来测试一下Xen虚拟机的运行效果。通过前文的探讨,可以看出一个虚拟机的运行需要两个要素:一是一套虚拟的硬件系统,二是一个包含了操作系统的磁盘镜像。QEMU虚拟机关于硬件的配置全由命令行指定,VirtualBox虚拟机的硬件配置存在于配置文件中,而Xen呢,它也存在于配置文件中,这个配置文件要我们自己写。至于磁盘镜像,还是复用我之前创建的那个WinXP.img吧,记住,它是qcow2格式的。

  先进入我主目录的virtual-os目录,ls 看一下,里面有我之前创建的WinXP.img。然后,我们创建一个WinXP_Xen.hvm配置文件,其内容如下:

builder = "hvm"
name = "WinXP_Xen.hvm"
memory = 2048
vcpus = 2
disk = [ ‘/home/youxia/virtual-os/WinXP.img, qcow2, hda, rw‘ ]
sdl = 1

  这段配置文件很简单,也很容易懂。 hvm 代表这是一个全虚拟化的虚拟机,和全虚拟化相对的是半虚拟化,半虚拟化只能运行经过修改的内核,但是可以获得更高的性能。为该虚拟机分配2个CPU和2G内存,并指定硬盘镜像文件。最后一个 sdl=1 表示使用SDL图形库显示虚拟操作系统的界面,如果不想用SDL,也可以写成 vnc=1,这样需要使用 vncviewer 才能连接到虚拟机操作系统的桌面。

  至于Xen的配置文件怎么写,管理命令怎么用,这个必须得有学习资料。通过 man xl 和 man xl.cfg 查看手册页是可以的,但是最全面的资料还是在Xen的官网 http://www.xenproject.org 上。

  使用 sudo xl list 命令可以看到系统中只有一个Domain 0在运行,然后使用 sudo xl create -c WinXP_Xen.hvm 即可运行一个Domian U虚拟机,该虚拟机使用WinXP_Xen.hvm配置文件。 xl 命令的 -c 选项表示把Domain U的控制台显示在Domain 0中,如果不用 -c 选项而使用 -V 选项,则创建虚拟机后使用 vncviewer 进行连接。新建的虚拟机运行起来后,再次使用 sudo xl list 命令,可以看到除了Domain 0,还多了一个名称为“WinXP_Xen.hvm”的虚拟机。运行效果如下图:

  关于Xen更多更高级的功能,比如动态迁移什么的,我这里就不试了。至于说到Xen虚拟机的隔离性,如果一个Domain U崩溃了,肯定是不会影响到Domain 0和其它Domain U的,但是如果Domain 0崩溃了,Domain U真的不会受到任何影响吗?Domain 0崩溃了怎么重启它呢?这都是我没想明白的问题。在折腾Xen的过程中,我曾多次重启过机器,重启后一看,WinXP_Xen.hvm还在继续运行,似乎是没有受到Domain 0的影响,但是我就想,我机器都重启了,电源都断了,Domain U它真的能丝毫不受影响吗?

总结:

  1.Xen虚拟机不应该是桌面用户的首选,因为它架构比较奇异不容易理解,可能因内核升级而出现不稳定,不能充分发挥桌面硬件的性能,比如显卡;桌面用户还是应该首选VirtualBox。

  2.企业及客户可以考虑Xen,因为它可以提供较好的性能和隔离性,企业级用户不需要桌面用户那么多的功能,所以可以把Domain 0做到很薄,可以完全不要图形界面,也不用经常升级内核,甚至可以选择一个经过修改优化的内核,这样就可以在一套硬件上运行尽可能多的虚拟机。

  关于Linux下虚拟机相关的内容,就写到这里吧。欢迎大家批评指正。

(京山游侠于2015-03-08发布于博客园,转载请注明出处。)

时间: 2024-07-30 20:26:45

Linux江湖22:虚拟机体验之Xen篇——令人脑洞大开的奇异架构的相关文章

Linux江湖21:虚拟机体验之VirtualBox篇——性能强大的经典架构

前两篇体验了QEMU和经过KVM加速的QEMU,并体验了第三方虚拟机管理工具virt-manager,让我们见识了开源社区的强大和开源虚拟机软件的高质量和高性能.这一篇,我来剖析一下VirtualBox.VirtualBox号称是目前开源界最强大的虚拟机产品,在Linux平台上,基本上都被大家选择为首选的虚拟机软件.VirtualBox的强大不是盖的,毕竟其后台是超有钱的Oracle公司.VirtualBox的任性也不是盖的,它硬是没有使用我前文所述的那些qemu.kvm.libvirt等被各个

Linux入门学习教程:虚拟机体验之KVM篇

在上一篇中,我展示了虚拟机软件QEMU的使用.效果及其性能,同时也分析了不同用户对虚拟机的不同追求.但是不管是桌面用户还是企业级用户,对虚拟机 软件的追求有一点是共同的,那就是性能.QEMU是一个强大的虚拟机软件,它可以完全以软件的形式模拟出一台完整的电脑所需的所有硬件,甚至是模拟出不同 架构的硬件,在这些虚拟的硬件之上,可以安装完整的操作系统.QEMU的运行模式如下图: 很显然,这种完全以软件模拟硬件的形式虽然功能强大,但是性能难以满足用户的需要.模拟出的硬件的性能和物理硬件的性能相比,必然会

Linux江湖020:虚拟机体验之KVM篇

在上一篇中,我展示了虚拟机软件QEMU的使用.效果及其性能,同时也分析了不同用户对虚拟机的不同追求.但是不管是桌面用户还是企业级用户,对虚拟机软件的追求有一点是共同的,那就是性能.QEMU是一个强大的虚拟机软件,它可以完全以软件的形式模拟出一台完整的电脑所需的所有硬件,甚至是模拟出不同架构的硬件,在这些虚拟的硬件之上,可以安装完整的操作系统.QEMU的运行模式如下图: 很显然,这种完全以软件模拟硬件的形式虽然功能强大,但是性能难以满足用户的需要.模拟出的硬件的性能和物理硬件的性能相比,必然会大打

Linux江湖019:虚拟机体验之QEMU篇

说起虚拟机,大家都不陌生.需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统:再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出N个系统组成各种各样的网络.(这个需要电脑的配置够强大才行,幸好本人的电脑够.)还比如用Windows的想玩Linux,用Linux想玩Windows,这样用虚拟机玩起来也比较方便:最后比如有人想研究一下目前最流行的大数据啊.云计算啊,想试一试Hadoop.Spark.OpenStack什么的,没有虚拟机怎么搭建

Linux江湖01:玩转Linux系统的方法论 (转载)

http://www.blogjava.net/youxia/archive/2015/01/08/linux001.html 2014年上半年,我是在写RCP系列.然后,由于要准备研究生毕业论文和答辩, 所以就中途停了下来.再后来,我又在博客园主站开始写Linux江湖系列.经过大半年的努力,Linux江湖系列已经有十几篇了.在这里,我将把其中的内 容整理后,转发到我的Java博客中.至于RCP系列,我还是会接着写的,不过要等我的心再次沉下来才行. Linus说“Just for fun”,而我

Linux初体验之练习篇(七)

Linux初体验之练习篇(七) tr IO重定向 神奇的自动挂载 tr 主要用途 转换或删除字符 tr - translate or delete characters tr [OPTION]... SET1 [SET2] tr命令是一个强大的字符转换工具,可以对来自标准输入的字符进行各种转换,包括字符集对应转换.删除或都取字符补集.压缩和格式调整.格式调整包括换行.回车.加入制表符等. 常用参数 -c, -C: --complemen, 取字符集的补集 -d: --delete, 删除所有属于

Linux江湖07:硬盘分区的陷阱及应对

之所以想到写这篇,是因为本人在折腾Linux系统的过程中,有多次掉入硬盘分区的陷阱的经历.最近几天,再一次掉入坑中,折腾了两天才从坑中爬出来.经过多方查询资料,终于弄明白了硬盘分区的一些概念.下面将其记录下来,以警示来者. 说起我自己掉坑的经历,无不与WinXP和Linux的激烈碰撞有关.多年前,我就开始在一台电脑上同时安装WinXP和Linux,只要遵守先安装WinXP再安装Linux的顺序,就不会出问题,Linux的安装程序会自动识别多系统,安装完成后可顺利启动多系统.有一天,我觉得单用Li

Linux 版本与虚拟机的选择

一.选择合适的 Linux 版本建议: 1.Linux 桌面系统,首选Ubuntu: 2.服务器端的 Linux 系统,首选 RHEL 或 CentOS,这两者当中首选 CentOS, 如果不考虑成本也可以选 RHEL,RHEL 有版权,CentOS 则无版权: 3.如果对安全要求很高,可以选择 Debian 或 FreeBSD: 4.需要使用数据库高级服务和电子邮件网络应用的用户可以选择SUSE(德国用的多): 5.新技术,新功能,可以选择 Fedora,是 RHEL 和 CentOS 的一个

Linux入门之内核管理番外篇(4)udev入门(1)

Linux入门之内核管理番外篇(4)udev入门(1) 前言 在上篇中的内核模块管理讲解中,最后或多或少会留下一些疑问,那么这些疑问就是内核模块的参数是怎么和对应的硬件所匹配上的,而硬件又是怎么被内核识别,并且一个个都映射成实际存在的文件,而这些文件之间的关系及作用.当然在最后了解到,这些硬件设备的探测信息是通过一个叫udev的工具来实现的,通过udev中配置的规则可以很有效的识别每一个硬件,并配合sysfs文件系统,将每个探测到的硬件信息导入到/sys目录中,那么与/proc目录对与内核系统信