当前位置: 移动技术网 > 科技>操作系统>Linux > Linux折腾记(二十二):虚拟机体验之Xen篇——令人脑洞大开的奇异架构

Linux折腾记(二十二):虚拟机体验之Xen篇——令人脑洞大开的奇异架构

2018年11月08日  | 移动技术网科技  | 我要评论

  这一篇我要体验的虚拟机系统是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 xensudo 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的官网 上。

  使用 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下虚拟机相关的内容,就写到这里吧。欢迎大家批评指正。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网