声明:本文是本人整理网上的相关文档组合而成,个人学习之用。
概念
虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互补影响,从而显著提高计算机的工作效率。
优势
通过虚拟化可实现降低IT成本,提高现有资产的效率、利用率和灵活性。
虚拟化技术
1. 全虚拟化(FullVirtualization)
全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。
全虚拟化模型
全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源
2. 半虚拟化(ParaVirtualization)
半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。
半虚拟化模型
半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
半虚拟化是获得最佳性能的方法,因为虚拟操作系统发出的指令不需要翻译。遗憾的是,在某些操作系统中不能完全使用准虚拟化,因为它需要一个特殊版本的操作系统。
半虚拟化不支持windows系统:
在准虚拟化中,子操作系统使用一个专门的API与VMM通信,VMM则负责处理虚拟化请求,并将这些请求递交到硬件上。由于有了这个特殊的API,VMM不需去做耗费资源的指令翻译工作。而且,使用准虚拟化API时,虚拟操作系统能够发出更有效的指令。然而,准虚拟化也有一个缺点,就是需要修改包含这个特殊API的操作系统。而且,这个缺点对于某些操作系统(主要是Windows)来说更要命,因为它们没有这种API。
虚拟化常见的几种软件:
常见软件种类:
Vmware
hyper-v
xen
kvm
#virtualbox
收费情况:
vmware 收费
hyper-v 收费(软件本身包含在系统内但是win server收费)
xen 开源
kvm 开源
KVM、Xen、Hyper-V、VMware EXSI原理和架构
1.KVM
KVM全称是Kernel-basedVirtual Machine,即基于内核的虚拟机。
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
KVM虚拟化平台架构
KVM 是一个独特的管理程序,通过将KVM 作为一个内核模块实现,在虚拟环境下Linux 内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。在这种模式下,每个虚拟机都是一个常规的 Linux 进程,通过 Linux 调度程序进行调度。
2.Xen
Xen 是第一类运行再裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red HatEnterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。
XEN 体系结构
XEN 体系结构图
一个 XEN 虚拟机环境主要由以下几部分组成:
XEN Hypervisor;
Domain 0 —— Domain Management andControl(XEN DM&C);
Domain U Guest(Dom U)
PV Guest
HVM Guest
下图显示除了各部分之间的关系:
Xen 三部分组成之间关系图
XEN Hypervisor :
XEN Hypervisor 是介于操作系统和硬件之间的一个软件描述层。它负责在各个虚拟机之间进行 CPU 调度和内存分配。XEN Hypervisor 不仅抽象出虚拟机的硬件,同时还控制着各个虚拟机的执行。XEN Hypervisor 不会处理网络、存储设备、视频以及其他 I/O.
Domain 0:
Domain 0 是一个修改过的 Linux kernel,是唯一运行在 XenHypervisor 之上的虚拟机,它拥有访问物理 I/O 资源的权限,同时和系统上运行的其他虚拟机进行交互。Domain 0 需要在其它 Domain 启动之前启动。
Domain U:
运行在 Xen Hypervisor 上的所有半虚拟化(paravirtualized)虚拟机被称为“Domain U PV Guests”,其上运行着被修改过内核的操作系统,如 Linux、Solaris、FreeBSD 等其它 UNIX 操作系统。所有的全虚拟化虚拟机被称为“Domain U HVM Guests”,其上运行着不用修改内核的操作系统,如 Windows 等。
3)XEN 工作原理
上面我们针对 Xen 的体系结构进行了简单的描述,我们知道 Xen 主要由 Xen Hypervisor,Domain0,DomainU 三部分组成。下面通过 Domain 0 与 Domain U 的通信以及这三部分的交互来探讨一下 Xen 的工作原理。
之前我们已经提到过 Domain U 分为 PV 客户系统和 HVM 客户系统两种,我们首先讨论一下 PV 客户系统,也就是半虚拟化操作系统工作原理。
首先我们需要知道在 Domain 0 中有两个驱动 Network Backend Driver 和 Block BackendDriver,它们分别用来处理来自 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 之间的快速共享网络设备,见下图。
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 最终达到访问网络设备或者磁盘的目的。见下图:
Domain 0 与 Domain U HVM Guest 通信示意图
Xen 虚拟机安装后在查看虚拟机时会发现有一个Domain-0的虚拟机。
1 2 |
|
3. Hyper-V
Hyper-V 体系结构图(quan虚拟化)
Hyper-V 是微软提出的一种系统管理程序虚拟化技术,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V 底层的 Hypervisor 运行在最高的特权级别下,微软将其称为 ring -1(而 Intel 则将其称为 root mode),而虚机的 OS 内核和驱动运行在 ring 0,应用程序运行在 ring3 下,这种架构就不需要采用复杂的 BT(二进制特权指令翻译)技术,可以进一步提高安全性。从架构上讲 Hyper-V 只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。
Hyper-V 支持分区层面的隔离。分区是逻辑隔离单位,受虚拟机监控程序支持,并且操作系统在其中执行。Microsoft 虚拟机监控程序必须至少有一个父 / 根分区,用于运行 64 位版本的 Windows Server 2008 操作系统。虚拟化堆栈在父分区中运行,并且可以直接访问硬件设备。随后,根分区会创建子分区用于承载来宾操作系统。根分区使用虚拟化调用应用程序编程接口 (API) 来创建子分区。
分区对物理处理器没有访问权限,也不能处理处理器中断。相反,它们具有处理器的虚拟视图,并运行于每个来宾分区专用的虚拟内存地址区域。虚拟机监控程序负责处理处理器中断,并将其重定向到相应的分区。Hyper-V 还可以通过输入输出内存管理单元 (IOMMU) 利用硬件加速来加快各个来宾虚拟地址空间相互之间的地址转换。IOMMU 独立于 CPU 使用的内存管理硬件运行,并用于将物理内存地址重新映射到子分区使用的地址。从系统的结构图,我们可以看出来 Hyper-V 与 Xen 的架构很相似。
4.Vmware ESXI
Vmware ESXI 体系结构图(完quaan虚拟化)
由上图我们可以看出来管理工具也是直接嵌入到了 ESXi vmKernel 中,没有再分化出单独的管理工具,这一点与 Xen 是相区别的。
软件的选择
比较这几种软件发现对linux、windows的虚拟化都可以做到,并且在实现的功能上没上太大的区别,但是vmware是收费软件,hyper-v 是集成在winserver上的而winserver又是收费的,也就是说使用hyper-v也是收费的,并且
hyper-v运行在winserver上系统本身跟linux相比更占资源,所以我们舍弃vmware和hyper-v,那么xen和kvm这俩种开源软件且可运行在linux系统,选择哪个呢?
KVM 和 Xen 技术对比
Linux虚拟化技术Xen和KVM的优势特点对比
项目 | Xen | KVM |
问世时间 | 2003年 | 2007年 |
支持企业 | Citrix、Novell、Oracle、Sun、Ret Hat(RHEL5)和Virtual Iron | Redhat、Ubuntu等 |
支持的虚拟化技术 | 全虚拟化、半虚拟化 | 全虚拟化 |
支持架构 | x86、IA64和AMD、Fujitsu、IBM、Sun等公司的ARM,以及x86/64 CPU商家和Intel嵌入式的支持 | 支持虚拟化的CPU |
支持操作系统 | UNIX、Linux和Microsoft Windows | UNIX、Linux和Microsoft Windows |
动态迁移 | 支持 | 支持(以前不支持) |
内核支持 | 需要对内核打补丁 | 内置在内核中 |
核心区别 | 运行支持XEN功能的kernel,这个kernel是工作在xen的控制之下,叫做domain0,使用这个kernel启动机器后,你就可以在这个机器上使用qemy软件,虚拟多个系统 | 在x86架构的计算机上实现虚拟化功能,需要cpu支持虚拟化功能。(目前cpu基本都支持虚拟化) |
版本更新 | 更新xen版本需要重新编译整个内核,稍有设置不慎,系统就无法启动 | 不需要重新编译内核,也不需要对当前kernel做任何修改,它只是几个可以动态加载的.ko模块。精简、代码量小。出错可能小 |
各自优势 | 支持半虚拟化理论上性能更高一些(需要修改客户机操作系统) | 被编入内核(2.6.20以上),未来在redhat推动下预计会有不错的趋势 |
转载于:https://blog.51cto.com/qiyishi/1389230