【转】Xen全虚拟化和半虚拟化

摘要:
完全虚拟化的缺点是其效率不如半虚拟化。6、 /etc/xen/scripts是用于初始化各种虚拟设备(如虚拟网桥)的脚本文件。桥接模式是默认模式。在这种模式下,虚拟系统和主机系统被认为处于并行关系。虚拟系统可以在配置IP或dhcp后连接到网络。

转自:http://blog.csdn.net/hp_2008/article/details/7619980

PV(Para-Vritralization)和FV(Full-Vritralization)的差别,主要以guest OS的硬件仿真程度做区分。

FV:FV是一般较常看到的作法,所有的guest OS完全不会看到实际的硬件为何,只能使用由Supervisor所提供的所有虚拟硬件,因此,在这种机制下,guest OS动作的性能一定会大受虚拟接口的影响。另外还有一个特点,就是因为完全仿真的关系,不支持新的技术,连ACPI开关机的机制都无法使用,也就是当使用 者在FV的guest OS下,若直接触动关机的按钮(这里的按钮是由VMM所提供的,不是主机上的)会直接断电,而不会进行关机程序。

PV:至于PV的作法,有鉴于一般Virtual Machine工具都是以完全仿真的方式,造成性能上的降低,因此,XEN在设计上,希望各操作系统可以在开发时就已经将XEN的技术包括进去,这样在使 用时,就可以用局部仿真的方式,让操作系统可以直接使用到硬件中的CPU、内存等,而不需要通过XEN做仿真的操作。

 

这样,若硬件都是由Virtual Machine仿真出来的,性能自然会变得比较慢,所以XEN所主推的概念就是,当操作系统默认支持XEN时就可以通过XEN的机制,直接使用到底层的硬件,而不是每个OS都要通过Hypervisor的接口,性能上就可大为提高。

在PV与FV的安装上,对CPU的要求是有差异的。以PV而言,因为OS原本就支持XEN,所以不需要经过特殊的处理步骤,因此,对CPU来于,没有特殊的要求,基本上都可以使用。
但FV就不同,因为FV模式是以完全仿真的方式进行,所以CPU必须要特别将此功能加入到CPU的核心中,因此,CPU是有特殊需求的。在Intel与AMD中针对Virtual Machine所加入的功能名称不同,分别为Intel VT与AMD-V。

在目前Linux的世界,XEN并不是唯一的,除了XEN这一架构外,另外还有一个KVM(Kernel based Vitrual Machine),从2.6.20版本之后的Linux Kernel就支持其功能。因为KVM的做法是以原本Kernel为依据,只要将其module加载即可使用,唯一较XEN弱势的是KVM以单一Full Virtuallization为服务方式。

一、Xen是一款虚拟化软件,支持半虚拟化和完全虚拟化。它在不支持VT技术的cpu上也能使用,但是只能以半虚拟化模式运行。


二、半虚拟化的意思是需要修改被虚拟系统的内核,以实现系统能被完美的虚拟在Xen上面。完全虚拟化则是不需要修改系统内核则可以直接运行在Xen上面。


三、VMware是一款完全虚拟化软件。完全虚拟的弱点是效率不如半虚拟化的高。半虚拟化系统性能可以接近在裸机上的性能。


四、 Xen是由一个后台守护进程维护的,叫做xend,要运行虚拟系统,必须先将它开启。它的配置文件在/etc/xen/xend-config.sxp, 内容包括宿主系统的类型,网络的连接结构、宿主操作系统的资源使用设定,以及vnc连接的一些内容。(如果你想增加一个虚拟网络设备的话,是需要在这里设 定的)


五、/etc/xen/auto 的含义是如果你想让被虚拟系统随着宿主系统一同启动的话,就把虚拟系统的配置文件放到这个目录下面来。


六、/etc/xen/scripts 是些脚本文件,用于初始化各种虚拟设备,比如虚拟网桥等。(如果要增加一个虚拟网络设备,同样需要在此处调节)


七、在/etc/xen下面会有些配置文件,这就是虚拟系统引导时所必须的些文件,里面记录了引导和硬件信息。


八、Xen的配置工具有许多,我使用的是virt-manager(GUI)、virt-install和xm。第一个用于管理和安装系统,第二个只用于安装系统,第三个用于启动系统。


九、安装半虚拟Linux有两种方法,一种是利用Linux的网络安装方式安装,http、ftp、nfs方式都是可以的(特别注意:半虚拟环境下安装 Linux是不支持本地光驱或者iso镜像安装的!),并且RHEL5会自动生成配置文件。第二种是先建立镜像文件,并格式化,然后挂载到本地文件系统上 来,将虚拟系统需要用到的文件拷贝进去并修改,然后手工创建配置文件并启动。


十、虚拟网络设备有三种模式:bridge桥模式、router路由模式和nat模式。其中桥模式是默认模式,在这种模式下,虚拟系统和宿主系统被认为是并列的关系,虚拟系统被配置IP或者dhcp后即可联通网络。


十一、原来的iptables无法对桥模式下的数据包做处理,RHEL5的iptables中增加了一个physdev的模块,可用iptables -m physdev -h查看帮助


以下部分摘自 http://www.net527.cn/a/Ciscomoniqi/Ciscomoniqiruanjian/2012/1110/25026.html

于是,我比较了一下两者之间的配置文件:
CentOS5——非完全方式虚拟机:
--------------------------------------------------------------------
[root@KCXEN xen]# cat kcentos5
# Automatically generated xen config file
name = "kcentos5"
memory = "512"
disk = [ 'tap:aio:/opt/xen/kcentos5/kcentos5_master.img,xvda,w', 'tap:aio:/opt/xen/kcentos5/kcentos5_slave.img,xvdb,w', ]
vif = [ 'mac=00:16:3e:11:b6:ec, bridge=xenbr0', ]

uuid = "734f2dbb-934e-ba83-d45d-ef656ecfbefc"
bootloader="/usr/bin/pygrub"
(可以发现非完全方式的虚拟机,都会有一个bootloader的配置项。后面指定了宿主机下/usr/bin/pygrub这个路径的启动脚本)
vcpus=1
on_reboot   = 'restart'
on_crash    = 'restart'
--------------------------------------------------------------------

Windows2003——HVM方式虚拟机
--------------------------------------------------------------------
[root@KCXEN xen]# cat kcwin2k3
# Automatically generated xen config file

import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'

name = "kcwin2k3"
builder = "hvm"
memory = "1024"
disk = [ 'file:/opt/xen/kcwin2k3/disk1.img,hda,w', 'file:/opt/xen/kcwin2k3/disk2.img,hdb,w','file:/opt/xen/kcwin2k3/disk3.img,hdc,w','file:/iso/win2k3.iso,hdd:cdrom,r', ]
vif = [ 'type=ioemu, mac=00:16:3e:40:16:60, bridge=xenbr0', ]
uuid = "25a47c57-294d-0a5d-6a1e-cedb09570b33"
device_model = "/usr/lib/xen/bin/qemu-dm"
kernel = "/usr/lib/xen/boot/hvmloader"
(可以发现HVM方式的虚拟机,都有一个Kernel的配置项。后面指定了HVM方式的虚拟机都是由/usr/lib/xen/boot/hvmloader这个引导器引导起来的)
vnc=1
vncunused=1
vncdisplay=1
vnclisten='0.0.0.0'
apic=0
acpi=0
pae=1
boot="c"
vcpus=1
serial = "pty" # enable serial console
on_reboot   = 'restart'
on_crash    = 'restart'
------------------------------------------------------------------


然后找一下/usr/lib/xen/boot/hvmloader这个引导器,原来是一个编译过的2进制执行程序。而/usr/bin/pygrub则是一个启动脚本。比较长,我摘录其中一段比较关键的地方贴出来看:
-----------------------------------------------------------
     ......
     ......

        # open the image and read the grub config
        fs = None
        for fstype in grub.fsys.fstypes.values():
            if fstype.sniff_magic(fn, offset):
                fs = fstype.open_fs(fn, offset)
                break

        if fs is not None:
            grubfile = None
            for f in ("/boot/grub/menu.lst", "/boot/grub/grub.conf",
                      "/grub/menu.lst", "/grub/grub.conf"):
                if fs.file_exist(f):
                    grubfile = f
                    break
            if grubfile is None:
                raise RuntimeError, "we couldn't find grub config file in the image provided."
            f = fs.open_file(grubfile)

     ......
     ......
---------------------------------------------------------
所 以,很明显的。问题就有答案了,还记得我们在安装XEN的时候需要安装什么吗?对了,要安装一个叫Kernel-xen的包。里面提供了支持XEN的系统 内核。安装完了之后还记得我们还要做什么工作吗?对了,就是检查修改/boot/grub/grub.conf引导文件,指定系统启动使用XEN功能内核 并从这个XEN内核启动。

非完全XEN虚拟机,之所以我这么称呼它,是因为它的确不是一个完全体。从上面给出的非完全虚拟机的 bootloader可以看出,非完全虚拟机的内核引导启动,其实都是依靠宿主机的内核,并且和宿主机的内核相关。换句话说,就是非完全XEN虚拟机必须 依赖宿主机,脱离宿主机,就算移植到其他宿主机上去的时候,也必须要看新宿主机“内核的脸色”,因此,非完全XEN虚拟机就是并非一个完全的虚拟机,它依 赖宿主机,他几乎不能脱离宿主机。

CentOS4和Windows2003的情况在这里就有一个共同点了:他们的内核都与宿主机的 CentOS5系统的内核镜像是不同的,所以如果使用一般的非完全的XEN虚拟机方式安装的话,行不通简直就是理所应当的事情了。也所以,安装 Windows2003的时候要选择HVM方式的XEN虚拟机安装。相比之下,HVM不完全依赖宿主机的内核,它使用的是XEN软件提供的一个内核引导 器,引导他们自己的内核。这也解释了安装Windows2003的时候为什么必须要使用HVM方式,也告诉了我,在CentOS5的宿主机上要是你想安装 CentOS4的时候,也应当使用HVM的方式。

免责声明:文章转载自《【转】Xen全虚拟化和半虚拟化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇hbase安装配置(整合到hadoop)一台服务器Nginx配置多个域名(一级域名或二级)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VMware vCenter Server6.5安装及群集配置介绍

借助VMware vCenterServer,可从单个控制台统一管理数据中心的所有主机和虚拟机,该控制台聚合了集群、主机和虚拟机的性能监控功能。VMware vCenterServer使管理员能够从一个位置深入了解虚拟基础架构的集群、主机、虚拟机、存储、客户操作系统和其他关键组件等所有信息。 准备环境和工具: 1、 一台ESXi6.5主机; 2、准备一台W...

Cuckoo SandBox的安装、配置和应用

依赖安装 在安装和配置Cuckoo之前,需要安装依赖的一些软件和库。首先创建一个文件夹存放cuckoo所需要的文件。 这里是需要的库和需要安装的文件。 安装 Python 库 (Ubuntu/Debian-based) Cuckoo的管理组件完全由Python脚本编写,所以就需要适合的Python版本。 完全兼容的Python版本是 2.7。 老版本的P...

转载:使用命令行启动VirtualBox虚拟机

使用命令行启动VirtualBox虚拟机装上VirtualBox就琢磨着如何让它开机自动启动,又或者能够通过命令行的形式直接启动指定的虚拟机。 看了下VirtualBox的官方文档,发现有一个命令可以满足我的需求,即VBoxManage。 VBoxManage提供了一系列的虚拟机管理命令,包括创建/删除/启动/修改等等,这里不一一列举。有点像Xen的XM命...

Kubernetes 使用 Kubevirt 运行管理 Windows 10 操作系统

原文链接:https://fuckcloudnative.io/posts/use-kubevirt-to-manage-windows-on-kubernetes/ 最近我发现我的 Kubernetes 集群资源实在是太多了,有点浪费,不信你看: 既然闲置资源那么多,那我何不想办法利用一下。怎么用,用来干什么又是一个问题,想到我手中只有 MacBook...

VM10虚拟机安装图解

支持32位windows操作系统和64位操作系统的VM10虚拟机 ============= 下载虚拟机: VM10虚拟机下载网址+Vm10的激活秘钥 https://jingyan.baidu.com/article/6b97984dd8c6b21ca2b0bf17.html ================= 安装前查看自己的系统是多少位的 开始安装...

virsh常见命令笔记

【基本命令】 virsh start 启动 shutdown 关闭 destroy 强制断电 suspend 挂起 resume 恢复 undefine 删除 dominfo 查看配置信息 domiflist 查看网卡配置信息 domblklist 查看虚机的磁盘位置 edit 修改配置文件 dumpx...