虚拟化现状分析与应用

来源:互联网 发布:计网tcp编程 编辑:程序博客网 时间:2024/05/16 02:24
虚拟化技术介绍及应用
内容目录
1 虚拟化技术简介
2 虚拟化技术历史
3 虚拟化技术原理
4 虚拟化技术分类
5 虚拟化技术实现
6 虚拟化应用项目
7 虚拟化技术的优势和挑战
8 虚拟化与可信计算
9 总结
10 参考资料:

1 虚拟化技术简介
目前虚拟化技术深入人心,从服务器到桌面都呈现出一片繁荣的景象,由此相信多数人都不会怀疑虚拟技术的可用性和研究其的必要性。通俗说来,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒。虚拟化技术就其本质而言属于一种资源管理技术,它将硬件、软件、网络、存储等硬件设备隔离开来,使用户能更合理更充分的控制与管理各种资源。

1.1 术语介绍
1).宿主机, 即虚拟机管理器所在的系统
2).客户机,即运行在虚拟化管理器之上的系统
3).VMM, Virtual Machine Monitor. 虚拟机监视器
4).hypervisor,也称为虚拟机管理系统(包含VMM)

2 虚拟化技术历史
IBM 早在 20 世纪 60 年代开发 System/360™ Model 67 大型机时就认识到了虚拟化的重要性。Model 67 通过 VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。但在x86平台上的虚拟化技术起步较晚,但随着x86平台CPU性能越来越强健,在市场上的应用越来越广泛,x86平台下的虚拟化技术同样得到了快速发展,特别是支持虚拟化技术的芯片辅助技术(即CPU虚拟化技术)出现以后,x86平台一直以来对虚拟化支持不佳的形象发生了很大改变,x86平台已经成为了虚拟化技术发挥作用的重要平台之一。
虚拟化技术的发展大概经历了下面两个阶段。
初级阶段:在虚拟化早期,人们采用模拟软件技术模拟出计算机硬件和软件。模拟层与操作系统对话,而操作系统与计算机硬件对话。在模拟层中安装的操作系统并不知道自己是被安装在模拟环境下的,你可以按照常规的方法安装操作系统。这种虚拟化需要付出很大的性能代价。
高级阶段:随着虚拟技术发展的不断深化,虚拟化被带到了一个更高的级别。在模拟层(负责被虚拟机器的指令翻译)和硬件之间,不需要任何主机操作系统运行硬件上的虚拟机。虚拟机监控器直接运行在硬件上。由此虚拟化变得更加高效。

3 虚拟化技术原理
我们首先简要介绍一下虚拟化技术及其涉及的元素。虚拟化解决方案的底部是要进行虚拟 化的机器。这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化;那么就需要系统管理程序 层的支持。系统管理程序,或称为 VMM,可以看作是平台硬件和操作系统的抽象化。在某些情况中,这个系统管理程序就是一个操作系统;此时,它就称为主机操作系统。
系统管理程序之上是客户机操作系统,也称为虚拟机(VM)。这些 VM 都是一些相互隔离的操作系统,将底层硬件平台视为自己所有。但是实际上,是系统管理程序为它们制造了这种假象。

3.1 VMM分类
VMM是虚拟化技术的核心组件,当前主流的 VMM 实现结构可以分为三类:宿主模型 (OS-hosted VMMs),Hypervisor 模型 (Hypervisor VMMs),混合模型 (Hybrid VMMs)。下面分别介绍。

宿主模型
如图3.1,该结构的 VMM,物理资源由 Host OS (Windows, Linux etc.) 管理,实际的虚拟化功能由 VMM 提供,其通常是 Host OS 的独立内核模块(有的实现还含用户进程,如负责 I/O 虚拟化的用户态设备模型)VMM 通过调用 Host OS 的服务来获得资源,实现 CPU,内存和 I/O 设备的虚拟化VMM 创建出 VM 后,通常将 VM 作为 Host OS 的一个进程参与调度如上图所示,VMM 模块负责 CPU 和内存虚拟化,由 ULM 请求 Host OS 设备驱动,实现 I/O 设备的虚拟化。
图3.1 宿主模型VMM结构图
优点:可以充分利用现有 OS 的设备驱动,VMM 无需自己实现大量的设备驱动,轻松实现 I/O 设备的虚拟化。
缺点:因资源受 Host OS 控制,VMM 需调用 Host OS 的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。
采用该结构的 VMM 有:VMware Workstation, VMWare Server (GSX), Virtual PC。

Hypervisor 模型
该结构中,VMM 可以看作一个为虚拟化而生的完整 OS,掌控有所有资源(CPU,内存,I/O 设备)VMM 承担管理资源的重任,其还需向上提供 VM 用于运行 Guest OS,因此 VMM 还负责虚拟环境的创建和管理。
图3.2 Hypervisor 模型VMM结构图

优点:因 VMM 同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM 的安全只依赖于 VMM 的安全。
缺点:因 VMM 完全拥有物理资源,因此,VMM 需要进行物理资源的管理,包括设备的驱动,而设备驱动的开发工作量是很大的,这对 VMM 是个很大的挑战。
采用该结构的 VMM 有:VMWare ESX Server, WindRiver Hypervisor, KVM(后期)

混合模型
该结构是上述两种模式的混合体,VMM 依然位于最底层,拥有所有物理资源,但 VMM 会主动让出大部分 I/O 设备的控制权,将它们交由一个运行在特权 VM 上的特权 OS 来控制。
VMM 只负责 CPU 和内存的虚拟化,I/O 设备的虚拟化由 VMM 和特权 OS 共同完成。
图3.3 混合模型VMM结构图
优点:可利用现有 OS 的 I/O 设备驱动;VMM 直接控制 CPU 和内存等物理资源,虚拟化效率较高;若对特权 OS 的权限控制得当,虚拟机的安全性只依赖于 VMM。
缺点:因特权 OS 运行于 VM 上,当需要特权 OS 提供服务时,VMM 需要切换到特权 OS,这里面就产生上下文切换的开销。
采用该结构的 VMM 有:Xen。

4 虚拟化技术分类
虚拟化技术的核心部分是VMM (虚拟机管理器),VMM的实现方式直接决定真个虚拟化解决方案的效率和功能。

4.1 按实现层次
按VMM的实现层次来分,目前有下面几种虚拟化实现方式。

1).指令级虚拟化,它是通过纯软件的方式模拟各种不同硬件的指令集来达到虚拟化的目的,这种方式的优点是可以完全的模拟出所需要虚拟设备的所有特性,这样必然会带来的一个缺点就是性能太差,而且实现复杂。代表软件有QEMU。

2).硬件级虚拟化,硬件级虚拟化是基于虚拟的硬件一般与实际硬件指令集非常相似这一假设前提下实现,因为有上面的前提,通过硬件虚拟化可以把客户机的大多数操作指令通过映射方式在主机上直接执行,从而大大提供虚拟化的效率。它的优点是简单高效,缺点是所虚拟的硬件平台范围有限,且可能需要硬件对虚拟化的支持。代表软件有xen,kvm等。

3).操作系统级虚拟化,(待补充)。
4).编程语言级虚拟化,代表有JVM(Java虚拟机)。
5).程序库级虚拟化,代表有WIne库(在linux下模拟windows的运行环境),cygwin库(在windows下模拟linux运行环境)。
这里需要说一下的是,我们一般提到的虚拟技术仅包括上面前三种类别,后两种属于一种广义上的虚拟化技术的范畴。本文中我们主要讨论的是狭义的虚拟化技术范畴。

4.2 按实现方式
虚拟化按实现方式来分,可以分为下面几种。

1).全虚拟化(Full virtualization),顾名思义,全虚拟化就是完全虚拟出一个主机所需要的所有环境,因为运行于其上的虚拟机来说,它感觉不到虚拟化管理器的存在,所以此种方案是对客户机的支持类型最广泛的一种。它的具体实现是灵活的,可以在指令级层,如QEMU,可以在操作系统级层,如Virtualbox,也可以在硬件级层,如KVM(需要芯片辅助技术支持)。
2).半虚拟化(Para-virtuallization),半虚拟化技术是为了改善传统x86平台下硬件对虚拟化支持不佳而提出的一种改进技术,它的实现在硬件级虚拟化层。为了提高虚拟化的效率,需要让客户机的操作指令直接让主机运行,以减少中间转换层造成的性能损失和时间延迟,但由于传统x86平台天生的缺陷--CPU指令的分环运行级存在等,导致一些操作系统指令必需在特权级(Ring 0)下运行,否则将会得到不同的运行结果,而这一点又是虚拟机管理器存在的环境中无法现实的。解决此问题的方法有下面几种:一是修改客户机系统(改变此类特殊指令的实现方式),二是采用虚拟机管理器监视并重定向特殊操作指令,三是修改x86 CPU设计结构以支持此类特殊操作指令。此三种方法中第一种方法即是半虚拟化技术中采用的,毕竟为了追求极致的虚拟化性能而小小的(可能不小)改变一点客户机的内容,而且完全不影响客户机的功能,这还是可以接受的。但此方法的缺点是无法支持闭源操作系统作为客户机系统。
3).硬件虚拟化,硬件虚拟化是指硬件直接支持虚拟化操作,包括CPU虚拟化支持技术,内存支持虚拟化技术,其他设备I/O虚拟化支持技术等。硬件虚拟化技术专门为改善X86平台在虚拟化技术方面的落后局面而出现,比如在CPU特权指令方面,新的支持VT(virtualiztion Technology)技术的CPU在传统的两环运行模式的基础上新加了一个运行级--特权级(或者也叫客户机模式),虚拟机管理器就运行于这一特权级模式,而其他的所有客户机的运行模式保持不变,仍运行在运行级0(Ring 0)和运行级3(Ring 3)两种模式下,硬件虚拟化技术解决了半虚拟化技术中的难题;在内存访问方面,新的内存技术将实现通过直接硬件地址转换来支持虚拟客户机的物理内存访问,由于内存是系统中最频繁访问的设备之一,所以新的支持虚拟化的内存技术可以大大提高虚拟机性能。正式一系列硬件虚拟化技术的出现和发展,使得虚拟化可以同时得到全虚拟化的良好支持性和半虚拟的高效性,可以预想随着硬件虚拟化技术的发展,x86平台下的虚拟化技术必将取得辉煌的战绩。
5 虚拟化技术实现

全虚拟化
全虚拟化(Full virtualization), 也称为原始虚拟化技术, 该模型使用虚拟机协调客户操作系统和原始硬件(见图5.1). 这里"协调"是一个关键词, 因为VMM在客户操作系统和裸硬件之间用于工作协调. 一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理。
全虚拟化: 使用Hypervisor分享底层硬件
图5.1
全虚拟化的运行速度损失比较大, 因为客户机系统是在Hypervisor的协调下和硬件交互. 全虚拟化最大的优点是操作系统没有经过任何修改.

半虚拟化
半虚拟化(Paravirtualization). 它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件, 它的客户操作系统集成了虚拟化方面的代码并知道自己是在虚拟模式下运行,因为客户操作系统自身能够与虚拟进程进行很好的协作.所以半虚拟化的性能接近于真实系统。不足是半虚拟化需要客户操作系统做一些修改(配合Hypervisor)。
半虚拟化: 通过客户操作系统分享进程。
图5.2

硬件虚拟化
硬件虚拟化技术是软件虚拟化技术的延伸和补充,包括CPU虚拟化技术,内存访问虚拟化技术,设备I/O虚拟化技术等。硬件虚拟化技术与软件层VMM结合可以极大的提高虚拟化的效率,如配合KVM使用支持VT技术的CPU,可以使客户机的性能损失降低到一个很小范围内。

6 虚拟化应用项目

6.1 KVM
Linux 2.6.20内核增加了KVM虚拟化技术. KVM是全虚拟化的解决方案, 它的特点是系统内核通过添加内核模块使内核自身成为一个Hypervisor(虚拟机管理程序). 内核中的KVM模块通过/dev/kvm字符串设备显示被虚拟的硬件. KVM使用修改过的QEMU进程做为客户操作系统接口.
图6.1 KVM模型
KVM模块向内核增加了一个新的执行模式: 客户模式. 官方原始内核(vanilla kernel)支持内核和用户模式. 客户模式用于执行所有非I/O客户代码, 普通用户模式支持客户I/O.
增加KVM到Linux内核是Linux发展的一个重要里程碑, 这也是第一个整合到Linux主线内核的虚拟化技术. KVM将包含于2.6.20内核数中, 现在你也可以通过内核模块方式在2.6.19内核使用kvm. 当运行在支持的硬件(需Intel VT和AMD SVM处理器)上, kvm支持Linux(32和64为)和Windows(32为)客户机.

6.1.1 KVM分析
KVM从一出现就收到开发者的追捧,它出现不多久就被收入到内核源码树中,接着时红帽宣布其将主力支持KVM,旗下的虚拟化业务也将逐渐由XEN向KVM转移。KVM天生精巧的结构和良好的效率,在硬件虚拟化技术的推动下,相信KVM将会在今后虚拟化领域占用重要地位,跟着它走没有错!
KVM 只是虚拟化解决方案的一部分,除了直接提供了虚拟化支持(可以为多个操作系统虚拟化处理器)的具有VT技术CPU外,整个KVM分为两部分。
核心KVM模块,核心层仅有3个内核模块:kvm,kvm_intel和kvm_amd,kvm_intel和kvm_amd分别对应Intel和AMD的CPU。它们提供来核心的虚拟机管理功能。
用户层程序QEMU,在客户操作系统上执行 I/O 的功能是由 QEMU (经过修改的QEMU)提供的。QEMU 是一个平台虚拟化解决方案,允许对一个完整的 PC 环境进行虚拟化(包括磁盘、图形适配器和网络设备)。客户操作系统所生成的任何 I/O 请求都会被中途截获,并重新发送到 QEMU 进程模拟的用户模式中。QEMU程序中提供了在用户层对客户机进行控制和管理的工具。

6.1.2 KVM与QEMU
QEMU是一个独立的项目,它通过指令模拟的方式模拟设备来提供虚拟化支持,XEN在这里正是借用它的这种本领来解决虚拟客户机需要的设备交互的问题。KVM使用的QEMU是修改过。

6.1.3 创建客户机实例
下面使用KVM虚拟化技术创建一个虚拟客户机实例的步骤,此步骤在fedora 11下测试通过。
1).首先确认下面文件存在于系统中,核心模块kvm,kvm_intel或者kvm_amd。用户层程序qemu_kvm,没有的话使用包管理器安装qemu。
2).确保核心KVM模块已载入,可以使用qemu-user软件包中提供的qemu服务自动载入,或者选择手动载入。
3).如果不使用物理分区,请使用dd命令手动建立一个足够大的镜像文件(也可以通过qemu_img命令实现此步,具体参考手册)。
4).启动客户机,使用光盘镜像文件安装系统,命令如下:
kvm -no-acpi -m 512 -cdrom guestos.iso -hda vm-disk.img
说明:-m指定内存大小,-cdrom指定使用光驱或者是镜像光盘文件,-hda 指定作为客户机第一磁盘启动器的物理磁盘或者镜像文件。
5).使用如下命令启动当前物理磁盘上的系统:
kvm -m 512 -hda /dev/sda
注意:同时在同一分区启动两个系统可能会导致分区数据出错。
6.1.4 KVM性能测试
使用qemu_kvm命令启动KVM虚拟机,如果当前主机CPU不支持VT技术,那么qemu_kvm将使用传统qemu模拟底层设备的方式提供底层虚拟支持,这样虚拟机的性能将打打折扣。在 支持VT技术的主机系统上,qemu_kvm将会自动开启CPU硬件虚拟化支持功能,在这种模式下客户机在使用CPU和内存时性能的损耗特别低,几乎接近于真实系统。但基于QEMU实现的KVM用户层系统在图形方面的性能目前表现较差,表现在图像显示效果不佳,鼠标移动有延迟。安装kqemu增强工具可以一定程度的改善这个情况,但要实现接近于主机系统的图形性能和流畅的用户体验,KVM还需要很大的进步。

6.2 XEN
XEN 是英国剑桥大学计算机实验室开发的一个虚拟化开源项目.
在Xen环境中,主要有两个组成部分。 一个是虚拟机监控器(VMM),也叫hypervisor。Hypervisor层硬件与虚拟机之间,最先被载入到硬件的第一层。 Hypervisor载入就可部署虚拟机。在Xen中,虚拟机叫做Domain。在这些虚拟机中,Domain0具有很高的特权,负责一些专门的工作。由 于hypervisor中不包含任何与硬件对话的驱动,也没有与管理员对话的接口,这些驱动就由 domain0来提供了。通过domain0,管理员可以利用一些Xen工具来创建其它虚拟机(DomainU)。这些domainU属于无特权 domain。在domain0中,还会载入一个xend进程。这个进程会管理所有其它虚拟机,并提供这些虚拟机控制台的访问。在创建虚拟机时,管理员使用配置程序与domain0直接对话。
图6.2 XEN 体系架构图
6.3 VMware
VMware是一个商业化的全虚拟化技术. Hypervisor是客户操作系统和硬件之间的抽象层. 该抽象层允许任何其它客户操作系统运行在主机操作系统之上.
VMware也能虚拟I/O硬件, 增加了高性能设备驱动到Hypervisor中.
整个虚拟(机)环境实际上是一个单独的文件, 这意味整个系统(包括客户操作系统, 虚拟机和虚拟硬件)可以简单快速地整合到一个新的主机, 从而实现负载均衡.

7 虚拟化技术的优势和挑战
7.1 优势
1). 提高现有资源的利用程度
2). 通过缩减物理基础架构和提高服务器/管理员比率,降低成本
3). 提高硬件和应用程序的可用性,进而提高业务连续性
4). 实现了运营灵活性
5). 提高桌面的可管理性和安全性
虚拟化技术结合当今正热的云计算,再加上可算计算这个安全的马甲护航,下一步一定会有更加强大,更加普及的应用接踵而现。从而可能会推动为人类服务的信息技术发生深刻的变革。
7.2 挑战
虽然目前虚拟化技术已经得到了较大范围的应用,但现在的虚拟化技术仍然还是一个新型的技术,距离成熟的技术它还有一些问题需要解决。我个人认为,以下两点是虚拟化技术下来发展中首先需要解决的问题:
硬件使用效率,如何在多客户机模式下最大限度的发挥硬件的能力是第一个问题。
安全可靠性,安全永远是最重要的,而可靠性同等重要。

8 虚拟化与可信计算
因虚拟技术在成本优化,支撑跨平台应用等方面的广泛应用,使得其安全问题逐渐凸显,可信计算作为一种安全保障基础设施。研究可信计算技术为虚拟化技术提供安全保障服务。通过可信计算提供的可信度量、可信存储和可信报告机制,净化终端的计算环境,搭建终端之间的可信连接,构建诚实、互相信任的虚拟空间。
研究虚拟化技术对可信计算技术的支撑,通过虚拟监控机提供的隔离和监控机制,缓解软件可信动态度量的理论危机,为在操作系统和软件应用层建立可信计算环境提供一套解决方案
所以,两个技术可以互相配合,互相支撑。
9 总结
虚拟化技术现在主要的一个焦点是服务器和操作系统的虚拟化, 比如像Linux, 虚拟化给性能, 可移植性和复杂性提供了许多选项. 这也意味者你能够为你的应用程序和项目选择最合适的虚拟化方法。
但随着近年来Linux桌面技术的快速,虚拟化另一个新的而且重要的领域--个人电脑桌面虚拟化已开始显现。虚拟化技术在解决桌面系统安全性可靠性方面,提高用户体验性方面,还有提高机器使用效率和加强业务整合能力等等方面,都将会有很大的作为。推广Linux桌面方面,使用虚拟机加Linux桌面的组合产品既可以兼容windows系统,同时还改善安全性差等缺点,提高用户体验,使用户逐渐熟悉Linux桌面系统。但是任重道远,虚拟化的高效性目前主要体现在CPU和内存访问上,在I/O操作和图形性能方面目前还需要很大改进,而图形性能是桌面用户尤其关注的方面。还好的是Redhat将回归对桌面技术的重视,目前KVM由Redhat主要提供支持,据称Redhat将在下来解决KVM图形性能不足的问题,我们拭目以待。
原创粉丝点击