Xen对虚拟机的虚拟化分为两大类,半虚拟化(Paravirtualization)和完全虚拟化(Hardware VirtualMachine)。同一个Hypervisor上可以同时运行这两类guest虚拟机类型。此外,还可以在HVM Guest上使用PV技术,这种方式称为PV on HVM。
半虚拟化(Paravirtualization)也称“超虚拟化”,简称为PV,由Xen开发的高效且轻量级的虚拟化技术。这种技术允许Guest操作系统感知到自己运行在Xen Hypervisor上而不是直接运行在硬件上,它不需要仿真硬件,从而能高效运行。在Xen Hypervisor上运行的半虚拟化的Guest操作系统,为了调用系统管理程序(Xen Hypervisor),要有选择地修改操作系统。PV不要求CPU支持虚拟化扩展,但依赖于Xen-PV-enabled内核和PV驱动程序。目前自2.6.24起,Linux内核已经通过Linux pvops framework原生支持Xen-PV,因此,大多数的Linux发行版都能直接运行于PV环境。
PV客户机中包含两类特殊驱动:网络前端驱动(Network Frontend Driver)和块设备前端驱动(Block Frontend Driver),分别用以与Dom0中对应的后端驱动通信以完成网络访问和块设备访问。
完全虚拟化(Hardware Virtual Machine)又称“硬件虚拟化”,简称HVM,是指运行在虚拟环境上的虚拟机在运行过程中始终感觉自己是直接运行在硬件之上的,并且感知不到在相同硬件环境下运行着其他虚拟机的虚拟技术。在Xen Hypervisor运行的完全虚拟化虚拟机,所运行的操作系统都是标准的操作系统,即无需任何修改的操作系统版本,同时也需要提供特殊的硬件设备。HVM依赖于Intel VT或AMD-V硬件扩展,同时,Xen还使用Qemu来为HVM模拟PC硬件,而CPU的虚拟化扩展技术还能够大大提升这些仿真硬件的性能。但需要注意的是,HVM虚拟机需要仿真多种硬件,因此其性能不如PV虚拟机。值的注意的是,在Xen上虚拟的Windows虚拟机必须采用完全虚拟化技术。
为了提高系统的性能,完全虚拟化HVM guest可以调用一些半虚拟化驱动(PVHVM Drivers)。这些驱动是在HVM环境中优化PV驱动,通过模拟磁盘和网络IO,这样就得到一个HVM上运行的PV系统。这意味着通过此种方式可以给一些系统(如WINDOWS)提提供更好的性能。
Xen 4.4引入了一种虚拟化模式称为PVH。这种模式本质上是PV guest使用PV驱动来做引导和I/O。在其他方面HW虚拟化扩展,而不需要硬件仿真。目前PVH还处于测试阶段,目前效果很好,在生产环境中使用前还需进行调优。
PVH目前状态
PVH Guest support is available from Xen 4.4
PVH Dom0 support is available from Xen 4.5
目前Xen中各种虚拟化模式的性能对比:
Xen包含三大主要部分:Xen Hypervisor、Domain0、DomainU。XenHypervisor即是虚拟化监视器(VMM),直接运行在硬件上,处于特权级ring 0。Dom0的内核运行在ring 1,又被称为Xen 0,是一个处于特殊地位的虚拟机。DomU的内核也是运行在ring 1,Application运行在ring 3。
Xen Hypervisor(VMM)是直接运行在硬件与所有操作系统之间的基本软件层。它负责为运行在硬件设备上的不同种类的虚拟机进行CPU调度和内存分配。Xen Hypervisor对虚拟机来说不单单是硬件的抽象接口,同时也控制虚拟机的执行,让他们之间共享通用的处理环境。但XenHypervisor不负责处理诸如网络、外部存储设备、显示设备或其他通用的I/O处理。
Xen虚拟化环境中用域(domain)来描述各虚拟机,每个域都有其ID等属性,因此各虚拟机常表示为domain 0、domain 1等,也可以使用简写的方式,如Dom0。 Domain 0 是运行在Xen Hypervisor之上独特的虚拟机,其操作系统内核为经过特殊修改的Linux内核。Dom0拥有直接访问物理I/O资源的特权,并且可以与其他运行在Xen Hypervisor之上的其他虚拟机(DomU)进行交互。其它的域没有直接直接访问硬件I/O资源的权限,并且彼此间是高度隔离的。所有的Xen虚拟环境都需要先运行Dom0,然后才能运行其他的虚拟客户机。Linux内核自2.6.37版本起添加了对Xen Dom0的支持,并且自3.0的版本起添加进了Xen所需要的关键性驱动及优化,因此,只需要在3.0及之后版本的内核编译时启用了相应的选项,其就可以直接运行于Dom0。
Domain 0 在Xen中担任管理员的角色,它负责管理其他虚拟客户机。在Domain 0中包含两个驱动程序,用于支持其他客户虚拟机对于网络和硬盘的访问请求。这两个驱动分别是Network Backend Driver和BlockBackend Driver。Network Backend Driver直接与本地的网络硬件进行通信,用于处理来自DomU客户机的所有关于网络的虚拟机请求。Block Backend Driver直接与本地的存储设备进行通信来处理DomU发出的读写请求。
此外Dom0通常会包含一个工具栈(Toolstack),其能够实现让用户完成虚拟机的创建、删除、配置等功能。此工具栈还提供了一个访问接口,因此,其管理功能还可以通过相应的命令行工具、图形化控制台或者如Cloudstack或Openstack类的云计算环境来完成。
Domain U是非特权域,客户虚拟机没有直接访问物理硬件的权限。上面介绍过Xen支持两种类型的虚拟化模式PV和HVM。所有在XenHypervisor上运行的半虚拟化客户虚拟机(Domain U PVGuests)都是被修改过的操作系统。所有完全虚拟化客户虚拟机(DomainU HVM Guests)则是标准的未被修改过的操作系统。
Xen能够与多个不同的工具栈结合工作,如默认的工具栈、Libvirt及XAPI。
1. Default/XL
在Xen4.1以后默认的管理工具为xl,在老版本中主要是通过xm/xend这一套工具,xl具有和xm几乎完全一致的使用方法,完全兼容。Xl主要基于libxl这个库来实现的。Libxenlight(libxl)是一个新的C程序库,提供更高级别的Xen控制,并可以被各种Xen高级toolstack共享。
2. libvirt/VIRSH
libvirt是一个通用的虚拟化API和工具组件,可用于管理众多的虚拟化技术(KVM、qemu等)。
3. XAPI/XE
XAPI即Xen管理API(Xen management API),它是Citrix XenServer和XCP默认使用的工具栈。XAPI是目前功能最通用且功能最完备的Xen工具栈,OpenStack、CloudStack等云计算解决方案都基于此API管理Xen虚拟机。XAPI主要提供XenCenter以及pool中各主机通信的接口。XenCenter通过XAPI来读取XenServer的配置、管理、License的管理、数据库的维护等等,同时也包括如存储(SR)、虚机、虚拟网卡、HA等等所有的功能控制。而Pool中的所有XenServer的操作请求也是通过XAPI传递给dom0,同时在池中的所有主机中间通信。简而言之,XAPI就是个和底层通信的中间层、接口层。
https://wiki.openstack.org/wiki/HypervisorSupportMatrix
下图是2013 Openstack中Hypervisor使用调查:
Citrix在2012年宣布退出Openstack,但Citrix对Openstack的态度是比较矛盾的,自己的Cloudstack是和Openstack竞争,但是为了拿下更多的客户,需要去支持Openstack下的Xen和XenServer,Rackspace还是XenServer的大客户。目前阶段,Citrix对Openstack的支持,基本是维护和提升提升XenAPI支持状态。
Openstack在XenServer中结构:
相关参考链接:
http://docs.openstack.org/icehouse/config-reference/content/introduction-to-xen.html
https://wiki.openstack.org/wiki/XenServer/XenAndXenServer
https://github.com/openstack-dev/devstack/blob/master/tools/
方式一:
1. 安装XenServer
2. 运行DevStack安装DomU
方式二:
1. 安装XenServer
2. 安装PV VM(OpenstackDomU)
3. 安装XenAPI Plugins
4. 安装Openstack Nova-compute及Neutronzu组件
5. 安装XenAPI Plugins
具体安装配置会在后面的博客中说明。