虚拟化技术

前言

近年来,计算机硬件与软件的性能比以往有了极大的发展与进步,计算机硬件的发展为来人们提供了极其强大的计算能力和极其丰富的计算资源,如不加以有效利用将会造成资源浪费。同时,随着计算机软件的发展,用户使用计算机的场合越来越多,这又导致用户对计算机的需求与要求越来越多,网络安全、数据灾备、系统移植、系统升级、软硬件成本等都成了使用计算机过程中要考虑和解决的问题。而虚拟化技术的出现与应用,为用户提供了解决这些问题的完美方案。本章就将介绍云计算与大数据技术紧密相关的虚拟化技术。

一、虚拟化技术简介

什么是虚拟化?

云计算的核心技术之一就是虚拟化技术。所谓虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化的核心软件VMM,是一种运行在物理服务器和操作系统之间的中间层软件。VMM是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括CPU、内存、磁盘、网卡在内的所有物理设备。VMM不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行VMM时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。

虚拟化方式

虚拟化技术有很多实现方式,比如根据虚拟化的程度和级别,有软件虚拟化和硬件虚拟化,全虚拟化和半虚拟化。

软件虚拟化:顾名思义,就是采用纯软件的方法在在现有的物理平台上实现物理平台访问的截获和模拟,该物理平台往往不支持硬件虚拟化。

硬件虚拟化:简单来说,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。

全虚拟化:完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层Hypervisor,或者叫做虚拟机管理程序或虚拟机监视器(VMM)。

半虚拟化:半虚拟化技术是后来才出现的技术,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要VMM耗费一定的资源进行翻译操作。

二、虚拟化技术原理

虚拟化概念很早就已出现。简bai单来说,虚拟化就是使用某些程序,并使其看起来类似于其他程序的过程。
将这个概念应用到计算机系统中可以让不同用户看到不同的单个系统(例如,一台计算机可以同时运行Linux 和 Microsoft? Windows?)。这通常称为全虚拟化(full virtualization)。
虚拟化也可以使用更加复杂的格式,其中单个计算机看上去具有多个架构(对于一个用户来说,它是一个标准的 x86 平台;对于另外一个用户来说,它是 IBM Power PC? 平台)。这种虚拟化形式通常被称为 硬件仿真。
最后,更加简单的一种虚拟化是操作系统虚拟化,其中一台计算机可以运行相同类型的多个操作系统。这种虚拟化可以将一个操作系统的多个服务器隔离开来(这意味着全都必须使用相同类型和版本的操作系统)。
虚拟化技术的工作原理:
虚拟化解决方案的底部是要进行虚拟化的机器。这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化;那么就需要系统管理程序 层的支持。系统管理程序,或称为 VMM,可以看作是平台硬件和操作系统的抽象化。在某些情况中,这个系统管理程序就是一个操作系统;此时,它就称为主机操作系统.
系统管理程序之上是客户机操作系统,也称为虚拟机(VM)。这些 VM 都是一些相互隔离的操作系统,将底层硬件平台视为自己所有。但是实际上,是系统管理程序为它们制造了这种假象。
目前使用虚拟化解决方案的问题是,并非所有硬件都可以很好地支持虚拟化。较老的 x86 处理器根据执行范围对特定指令会产生不同结果。这就产生了一个问题,因为系统管理程序应该只能在一个最受保护的范围中执行。由于这个原因,诸如 VMWare 之类的虚拟化解决方案会提前扫描要执行的代码,从而将这些指令替换为一些陷阱指令(trap instruction),这样系统管理程序就可以正确地处理它们。Xen 可以支持一种协作的虚拟化方法,它不需要任何修改,因为客户机知道自己正在进行虚拟化,并已经进行了修改。KVM 会简单地忽略这个问题,如果您希望进行虚拟化,就强制必须在更新的硬件上运行。
一、 虚拟化技术
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)
1、虚拟化技术的分类:
(1) 模拟:Emulation
Qemu, PearPC, Bochs, …

(2) 完全虚拟化:Full Virtualization,Native Virtualization
完全虚拟化提供底层物理系统的全部抽象化,且创建一个新的虚拟系统,客户机操作系统可以在里面运行。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)。
VMware是一款完全虚拟化软件。完全虚拟的弱点是效率不如半虚拟化的高
半虚拟化系统性能可以接近在裸机上的性能。
VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

(3) 半虚拟化:Para-Virutalization
半虚拟化需要对运行在虚拟机上的客户机操作系统
进行修改(这些客户机操作系统会意识到它们运行在虚拟环境里)并提供相近的性能,但半虚拟化的性能要比完全虚拟化更优越。

特点:GuestOS明确知道自己运行虚拟机之上;
xen, UML(user-mode linux)

(4) 容器级虚拟化:
LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, …

(5) 库级别虚拟化:
wine

(6) 程序级虚拟化
jvm, pvm, …

2、主机虚拟化:Emulation, Full Virtualization, Para-Virutalization
Type-I:Hypervisor直接运行于硬件;
Type-II:Hypervisor运行主机OS之上;

3、云栈的类别:
IaaS(Infrastructure-as-a-Service)基础设施服务
PaaS(Platform-as-a-Service)系统平台服务
SaaS(Software-as-a-Service)软件服务
FWaaS(FireWall as a Service)防火墙服务
DBaaS(DataBase-as-a-Service)数据库服务
LBaas (load-balancer-as-a-service)负载均衡服务
二、主机虚拟化:
1、cpu的虚拟化:
模拟类型:emulation,虚拟机的arch与物理平台的arch可以不同;qemu
虚拟类型:virtualization
完全虚拟化(full-virt)

  • BT:通过软件二进制转换
  • HVM:硬件辅助的虚拟化
    半虚拟化: (pare-virt)
  • GuestOS明确知道自己运行于虚拟技术中
    硬件级物理cup虚拟化技术
    英特尔硬件虚拟化技术interl-VT
    AMD硬件虚拟化技术AMD-V
    2、内存虚拟化管理
    早期,虚拟机中的内存到物理内存地址机制,用软件实现, shadowmmu很低效
    硬件内存中添加了,标识虚拟机标签机制tagged TLB。

MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

硬件级内存虚拟化:
硬件级物理内存映射到虚拟机

英特尔硬件虚拟化技术EPT,Extended Page Table
AMD硬件虚拟化技术NTP,Nested Page Table
3、硬盘的虚拟化:
虚拟机如何使用硬盘的空间:虚拟机在物理硬盘上划分一个文件来使用,此文件也是靠宿主机通过文件系统将磁盘分区后,并创建文件系统后,分给虚拟机一个文件的大小的空间。在宿主机上表现的就是一个文件,而在虚拟机上表现的就是一块硬盘。所以还需要用软件的方式模拟一个适配器,将此文件,模拟成硬盘。
4、网络虚拟化
用软件的方式给每个虚拟机虚拟一块网卡和MAC地址,当通信时使用同一块物理网卡,网卡通讯有排队方式,在同一台物理网卡上,排队执行任务。(将物理网卡设为混杂模式;无论是不是发向本机物理网卡的内容都给与接收);此时将物理网卡也虚拟化一个MAC地址,把物理网卡当作交换机来使用。
5、IO虚拟化
I/O全虚拟化技术
通过VMM模拟I/O设备(磁盘和网卡等)实现虚拟化。
Guest OS所能看到就是一组统一的I/O设备。VMM截获Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。
I/O半虚拟化技术
通过前端(Front-End)/后端(Back-End)模拟实现虚拟化。
Guest OS中的驱动程序为前端,VMM提供的与Guest通信的驱动程序为后端。前端驱动将Guest OS的请求通过与VMM间的特殊通信机制发送给VMM的后端驱动,后端驱动在处理完请求后再发送给物理驱动。
I/O透传技术
设备透传就是向一个特定客户操作系统提供一种设备隔离,对于性能而言,使用设备透传可以获得近乎本机的性能。对于某些网络应用程序(或那些拥有高磁盘 I/O 的应用程序)来说,这种技术简直是完美的。这些网络应用程序没有采用虚拟化,原因是穿过管理程序(达到管理程序中的驱动程序或从管理程序到用户空间模拟)会导致竞争和性能降低。但是,当这些设备不能被共享时,也可以将它们分配到特定的客户机中。例如,如果一个系统包含多个视频适配器,则那些适配器可以被传递到特定的客户域中。
6、一型虚拟化type-1
特点:于硬件级别直接运行hypervisor虚拟机管理控制
xen,vmware ESX/ESXI
在这里插入图片描述
7、二型虚拟化type-2
特点:host主机上建立guest虚拟系统,有宿主机
在硬件级别运行一个os(host os),而此上运行一个vmm监视器,用于管理guest虚拟系统
vmwarworkstations, kvm,virtualbox
三、容器级级虚拟化
缺点:相较于主机级虚拟化隔离的不彻底
方案:lxc, libcontainer, runC, openvz

Linux内核运行在物理设备上;在内核上运行多个操作系统如:centos,wubantu;susan;等,因为他们都是基于linux内核来开发的不同界面的操作系统而已,底层运行的内核是相同的。在每个操作系统上在运行每个应用。在内核上运行一个软件来创建和管理容器,是一个很小的软件,基本不消耗性能。

由于多个操作系统使用的是同一个内核,当在操作系统上执行关机命令,就会将内核关闭,所以需要将每个操作系统隔离开来,关掉的只是自身容器 本身而已。各个操作系统之间的操作互补干扰。(共享内核)

四、KVM虚拟技术
1、KVM概述
以色列qumranet公司研发,后被RedHad公司收购
(1)kvm只支持x86平台
(2)依赖于 HVM,inter VT AMD-v
KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
工作原理
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

在这里插入图片描述
2、KVM的核心组件:
(1)、 kvm.ko内核模块
(kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能;
(2)、 qemu-kvm:用户空间的工具程序
qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例;
(3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具
libvirt是cs架构应用:
客户端:libvirt-client
virt-manager
daemon:图像化工具
libvirt-deaemon
3、KVM运行模式
KVM模块load进内存之后,系统的运行模式:

内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;
用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
来宾模式:GuestOS的用户模式;所有的非IO类请求;
4、KSM机制
扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。

5、kvm工具集:
在这里插入图片描述
qemu工具

qemu-kvm:用户空间的工具程序,创建管理虚拟机

qemu-img:是 QEMU 的磁盘管理工具

libvirt工具

GUI:virt-manager, virt-viewer:图形化管理
CLI: virsh, virt-install:创建管理虚拟机
集群工具:
libvirtd:管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。Libvirt是一个C工具包的虚拟化功能与最新版本的Linux(以及其他操作系统)。主包包含libvirtd服务器虚拟化支持出口

三、常见的虚拟化技术解决方案

虚拟机技术
在虚拟机技术(Virtual Machine Monitor)中,不再对底层的硬件资源进行划分,而是部署一个统一的Host系统。在Host系统上,加装了Virtual Machine Monitor,虚拟层作为应用级别的软件而存在,不涉及操作系统内核。虚拟层会给每个虚拟机模拟一套独立的硬件设备,包含CPU、内存、主板、显卡、网卡等硬件资源,在其上安装所谓的Guest操作系统。最终用户的应用程序,运行在Guest操作系统中。这种虚拟机运行的方式有一定的优点,比如能在一个节点上安装多个不同类型的操作系统;但缺点也非常明显,虚拟硬件设备要消耗资源,大量代码需要被翻译执行,造成了性能的损耗,使其更合适用于实验室等特殊环境。其代表产品有EMC旗下的VMware系列、微软旗下的Virtual PC/Server系列等。
准虚拟机技术
为了改善虚拟机技术(Virtual Machine Monitor)的性能,一种新的准虚拟化技术(Para-Virtualizion)技术诞生了。这种虚拟技术以Xen为代表,其特点是修改操作系统的内核,加入一个Xen Hypervisor层。它允许安装在同一硬件设备上的多个系统可以同时启动,由Xen Hypervisor来进行资源调配。在这种虚拟环境下,依然需要模拟硬件设备,安装Guest操作系统,并且还需要修改操作系统的内核。Xen相对于传统的Virtual Machine Monitor,性能稍有提高,但并不十分显著。为了进一步提高性能,Intel和AMD分别开发了
操作系统虚拟化技术
最新的虚拟化技术已经发展到了操作系统虚拟化,以SWsoft的Virtuozzo/OpenVZ和Sun基于Solaris平台的Container技术为代表,其中Virtuozzo是商业解决方案,而OpenVZ是以Virtuozzo为基础的开源项目。他们的特点是一个单一的节点运行着唯一的操作系统实例,通过在这个系统上加装虚拟化平台,可以将系统划分成多个独立隔离的容器,每个容器是一个虚拟的操作系统,被称为虚拟环境(即VE,Virtual Environment),也被称为虚拟专用服务器(即VPS,Virtual Private Server)。在操作系统虚拟化技术中,每个节点上只有唯一的系统内核,不虚拟任何硬件设备。此外,多个虚拟环境以模板的方式共享一个文件系统,性能得以大幅度提升。在生产环境中,一台服务器可根据环境需要,运行一个VE/VPS,或者运行上百个VE/VPS。所以,操作系统虚拟化技术是面向生产环境、商业运行环境的技术。从最早的硬件分区到现阶段的虚拟机和虚拟操作系统,虚拟化技术已经发展了好几代,不同的技术路线也带来了不同的优劣势。选择什么样的技术和产品,用户还是应该结合自身的预算和应用实践来决策。

优势
虚拟机虚拟化技术所能提供的优势取决于客户的目标、所选择的特殊虚拟技术以及现有的IT基础架构。并非所有的客户都能够从实现某一特殊虚拟化解决方案中获得同样的利益。现在,即使是使用虚拟化进行简单的服务器整合,客户们也经常可以在某种程度上获得以下很多利益:更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。
降低管理成本
虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量;隐藏物理资源的部分复杂性;通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务;实现负载管理自动化。另外,虚拟还可以支持在多个平台上使用公共的工具。
提高使用灵活性
通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。
提高安全性
虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。
更高的可用性
虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。
在这里插入图片描述
更高的可扩展性
根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。
互操作性和投资保护
虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。
改进资源供应
与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。与物理资源相比,虚拟资源因其不存在硬件和操作系统方面的问题而能够在出现崩溃后更快地恢复。
AMD虚拟化技术
简言之,AMD Virtualization技术是一项基于硬件的技术,该技术支持虚拟软件在一台基于AMD皓龙处理器的物理服务器上运行多个操作系统和应用,有助于服务器实现更高的效率和利用率。你无需再采用“一个操作系统、一个应用和一台服务器”这种运行模式。AMD的Virtualization技术使你能更好地利用自己的资源,你的服务器和工作站将变得更加高效,数据中心的运转也更加有效。例如,当今的服务器在以不足15%的容量运行时,其能耗和散热仍保持在24×7的水平。AMD Virtualization技术具有快速虚拟化索引的功能,这就意味着AMD四核皓龙处理器能够简化数据中心,实现更高的利用率。AMD的片内安全和虚拟技术代号分别称作Presidio和Pacifica,据其官员表示将出现在明年的Opteron处理器中。“每个人都预见到虚拟和安全技术能解决到数据中心的某些问题,”AMD的微处理器业务部总经理Marty Seyer说。
在安全方面,Presidio将利用到微软即将推出的Windows Vista中某些功能。但AMD更吸引人的一项举措是让其内存控制器更“虚拟智能化”——让芯片在一台虚拟机的不同虚拟地址之间建起一道坚固的壁垒。另外,这样还能让Presidio阻止某些黑客攻击。这类攻击通常会强迫机器借某张CD或某个分区上的操作系统启动并使用特别工具读取机器内存中的内容。
AMD称Presidio会不断改进以包含其他保护技术,例如加固键鼠等输入设备与操作系统之间通讯通道等。由于这种保护技术需要操作系统的帮助,微软为此已经计划为Vista添加多种类型的安全技术。AMD的官员还表示将在明年的处理器中添加对信用平台模块(Trusted Platform Module) 1.2等Windows机器以外技术的支持。事实上,AMD正和开放信任运算机构合作开发Linux平台上的可信赖运算标准,预计集成TPM的服务器将在2007年上市。至于用于减轻VMware等虚拟软件部分工作负担的Pacifica技术,AMD称也会不断改善并最终包含输入/输出虚拟技术。AMD已经开始这项Xen计划的研究工作,不过他们不愿透露相应产品何时上市。
AMD的Presidio和Pacifica技术和Intel的虚拟技术及"LaGrande"安全技术十分相似。虽然Intel一直称到明年首季才会向系统厂商推广使用新的双核奔腾D处理器"resler",但其实他们已经开始供货部分集成虚拟技术的奔腾四处理器,而LaGrande安全功能也会在明年出现于Intel处理器中。比较值得我们关注的应该是Pacifica虚拟技术,这将可以大大提高台式处理器的运行能力。Pacifica技术最突出的地方在于对内存控制器的改进方面 。
“Pacifica”通过Direct Connect Architecture(直接互连架构)和在处理器和内存控制器中引入一个新模型和功能来提高CPU的虚拟应用。
与过去的方法来进行虚拟应用不同,这项新的技术能够减少程序的复杂性,提高虚拟系统的安全性,并通过兼容现有的虚拟系统管理软件来减少花费在虚拟管理系统上的费用。例如,用户能在一部机器上轻易地创建多个独立且互相隔离的分区,从而减少了分区之间病毒传播的危险。不过,AMD在虚拟化技术方面仍比Intel慢了一步。AMD表示其IO虚拟化技术规范已经成型,且技术授权完全免费,并将鼓励软硬件厂商采纳该技术并集成进PC中。
目前AMD已经和VMware、Xensource以及微软等公司结盟推广其虚拟化技术。AMD的虚拟化技术之前的开发代号为Pacifica,这种技术将在AMD今年的64位CPU核心逻辑以及芯片组两个层面得以实现。
英特尔虚拟化技术
在前不久的IDF春季论坛上,Intel向人们展示了代号为“Vanderpool”的虚拟化技术。这项技术将运用在Intel今年迟些时候推出的桌面CPU、64位ItaniumCPU以及明年推出Xeon服务器芯片和移动CPU上,届时Intel的CPU将拥有硬件层次的虚拟化技术。
提到虚拟化技术,大家并不陌生。这项技术在传统的大型机和Unix系统上早已是很普及了,但因为桌面CPU大都使用的是X86架构,这决定了在其之上使用硬件级虚拟化技术的难度。Intel可谓创造先河,誓将该技术运用到桌面级产品上,用以提高CPU的性能和降低系统组建开销。这也在一定程度上符合Intel目前的策略,不再一味追求CPU的速度,而把焦点集中在CPU的效率上来。本文就将为读者详细介绍Vanderpool Technology技术(以下简称VT),它是什么、做些什么事、存在的问题及解决方法,还有在技术层面上它是如何运作的。
应用虚拟化平台
通过和信应用虚拟化来发布企业应用系统,能够为用户带来更好的体验。不需要改变现在网络结构和修改任何应用程序,就能实现快速、灵活地部署,而且内置的安全、负载均衡机制保证了企业不间断业务的进行,同时大大简化系统管理员管理和维护工作量。
使用和信应用虚拟化有什么好处?
使用和信应用虚拟化能够做到:

  • 软件应用的集中管理;
  • 远程安全接入与应用访问控制;
  • 应用加速;
  • 企业应用平台从局域网向互联网迁移。
    和信应用虚拟化客户端环境要求
    操作系统:Windows XP、2003、Vista、Win7 32位及64位系统
    和信应用虚拟化客户端无特殊要求,只要能顺利安装以上操作系统,均可无障碍使用和信应用虚拟化。
    什么是虚拟化
    虚拟化能使用户在一台服务器上同时运行多个操作系统,这与“多重任务处理”技术有些类似。不过“多重任务处理”技术只允许用户在同一机器设备的同一操作系统中运行多个程序,而虚拟化则可让用户在同一机器设备中运行多个操作系统。这样用户能更灵活高效地配用计算机资源,并且有助于提高安全性能。
    想象一下,一个操作系统几乎不需花任何时间就可被启动,即使它崩溃了,你只需简单地将它剔除出去,同时立即装载一个新的。如果你正在同时运行几个操作系统,当你准备给其中一个载入新的映像时,你可马上将它关闭,并把该系统正在处理的工作分流给其他系统运行。如果你有5个RedHat的副本正在运行Apache服务器软件,而其中一个因满负荷而停止响应,没问题,你只需简单地将响应请求转交给其他4个系统处理,同时重启那个停止工作的系统就行了。
    如果你已为你正在运行的操作系统存储了一份“快照”,那么每当有一些不愉快的事情发生时你都可重新启动它,例如被黑客攻击、感染病毒。从一个安全的分区载入映像并修复好它就行了。虚拟化还可让用户毫不费时地重新安装操作系统而不需像以往使用Ghost那样去安装设备驱动。你可简单地就像使用普通程序那样去载入、卸载和存储操作系统。
    同样,它也允许你在同一台机器上使用多个不同的操作系统。如果你是一名程序员,需要编写代码使它们在Windows 95/98/Me/2000/XP上都能运行,你可在你的办公桌上准备5台机器或是1台运行了5种虚拟化操作系统的电脑。同时,作为程序员的你需在每个浏览器的每个版本上校验这些代码,很明显微软不会让你在一个已拥有高版本IE的情况下去安装更低版本的IE去做这些事,但你可一个个地安装旧的操作系统或采取更好一些的解决方法——让它们同时运行。
    现有虚拟化技术及缺陷
    是不是一切都很简单和完美?然而在虚拟化世界并非一切都是尽善尽美的。最显而易见的就是那么多的副本操作系统(上面例子中的操作系统副本多吗?你可以想象一个网络主机公司,20个、50个都是有可能的)同时运行在一台计算机上需要占据很多的资源并导致更昂贵的服务器开销。数据传输在任何情况下都变得更难,因为越多东西被载入,需要的存储器容量也就越多。
    是的,真正的杀手就是系统开销。目前在计算机虚拟化方面有几项技术,但它们都伴有不同程度降低系统性能方面的问题。单就CPU而言,其占用率可以从10%到超过40%。
    很显然,我们需要新的技术来解决这些问题。Intel所要采用的VT技术背后的思想就是降低虚拟化时的系统开销。在我们深入了解它如何工作之前,我们有必要了解一下虚拟化技术到底是如何实现不同的操作系统工作在同一CPU上的。
    目前主要存在有3种类型的虚拟化技术:Paravirtualisation、二元码转译和模拟器。大家最为熟悉可能就是模拟器了。你可以让一个超级任天堂的模拟器在Windows XP的一个窗口中运行,同时还可有另一个PS模拟器。这些都可看作是虚拟化的最基本形式。模拟器需耗费巨大的CPU开销,如果你非要去模拟硬件装置的每一个Bit位,你将花费大量的时间和精力。比较好的方法是跳过其中的某些部分,我们使用的模拟器就是这样,它工作得也还过的去。
    这个领域的另一端就是目前较流行的并被业界认可的“Paravirtualisation”(以下简称PV)技术。按字面意思理解,是编程序模拟的意思。它让主机操作系统知道它们正工作在一个虚拟化的环境中,通过修改它们以使之工作得更好。因此操作系统需针对这种方法进行修改和调整,它们必须来回于操作系统的编写人员和编写虚拟化软件人员之间。从这个角度来看,它并非是完全的虚拟化,因为存在这种合作的关系。
    PV技术在开源代码的操作系统中工作得不错,Linux,、xBSD都是很合适的PV工作平台的候选者,你可在这些系统中任意调整所需调整的地方,使PV能工作得更好。而Windows则不行,这大概能解释最近为什么众多IT巨头吹捧开源虚拟化技术Xen了。
    而“二元码转译”(以下简称BT)技术可说是较折衷的方法了。它所要做的取决于操作系统将要做些什么,并在不知不觉中改变它。假如操作系统试图去执行指令A,但该指令A会给虚拟化引擎带来某些问题,那么BT将把它转换成某些更合适的指令并伪造指令A应该返回的结果。这是一项欺骗工作,且占用大量CPU资源,另外用许多代码取代一条代码也不会使事情运作得快些。
    当你了解这些后,你会感到头痛。纯粹致命的缺陷的确没有,但都没有一个简单的解决方案。这些虚拟化的技术仍在继续运用,只是人们都在尽量使其处在一个较低程度的缺陷范围内工作罢了。是什么造成这样的呢?
    什么问题困扰着我们
    对于X86系统架构的CPU而言,至少在32位领域,有太多让人头痛的条条框框,但作为一条总则,它们都包含有环转换器(Ring Transitions)和有关指令。从概念意义上说,环是一种划分系统特权级别的方法(因此“Ring”也称作特权环)。你可让操作系统运行在一个特权级别上而不会使之被用户程序更改。这样即使你的程序出了问题,它也不会导致系统崩溃,而操作系统能取得控制权,关闭出毛病的程序。这些环强行控制系统的不同部分。
    Intel公司的X86系列CPU(包括80386、80486、Pentium、Pentium Pro、Pentium Ⅱ、Pentium Ⅲ以及现在的Pentium 4CPU),提供4个特权级别R0、R1、R2和R3。较大的数字表示较低的特权,我们可简单理解为运行在某一级别的程序无法改变运行在较小数字级别上的程序,但较低数字级别上的程序可干扰甚至控制运行在较高数字级别的程序。
    在实际运用中,被经常用到的只有R0和R3,即最高级别和最低级别。操作系统运行在R0上,而用户程序运行在R3上。X86架构在向64位扩展时,采用的方法之一就是通过去掉中间的特权级别——R1和R2。几乎没有人注意到它们消失了,除了那些使用虚拟化技术的特定人群。
    像VMware这类软件模式的虚拟化机(Virtual Machines,以下简称VM)显然必须运行在R0级别上,但如它们要想保持完全控制权,就必须使操作系统在这个级别之外。最显而易见的解决办法是强迫主机操作系统运行在一个较低级别的环中,如R1。它们的部分代码原先被设定为从R0到R3,而不是R1到R3。虽然在PV环境中,你能修改操作系统从而使它工作得很好,但如果你要找到一个圆满的解决方法,就必须使操作系统工作在R1级别中。
    可如此一来又出现问题了,有些指令只有当它们从R0级里发出或发往R0级时才会工作,如果不在正确的环中,这些指令会运作得很古怪。如果你试图这么去做,会有很不好的后果。让代码在正确的环中执行确实能防止操作系统破坏VM,同时也防止运行在主机操作系统上的软件破坏操作系统自身。这就是所谓的“0/1/3”模式。
    还有一种模式被称为“0/3”模式。这种模式将VM放入R0级别中运行,而将操作系统和用户程序都放入R3级别中。但从本质上而言,它还是像“0/1/3”模式一样去处理其他事情。在R3级别里,有特权的操作系统能更轻松地执行用户程序,由于不存在环的阻隔,也使它运行的更快一些,但系统稳定性不佳。
    另外一个方式去使用“0/3”模式,就是让CPU保有两份运行于R0级别中的事物的页表。一份为操作系统,另一份为运行在R3级别中的老程序。这样可拥有一份完整的存储器保护集,用来把用户程序隔离到操作系统空间之外。当然,这同样需要消耗性能,只是以不同的方式罢了。
    概括来说,在“0/1/3”模式中,系统安全性更高一些,但从R3到R1、R3到R0或R1到R0转换时性能会受到一些影响,反过来也是。在“0/3”模式中,只存在R0与R3之间的转换,所以它潜在的比一个非主机操作系统运行得更快一些。但如你碰到一个问题,“0/3”模式比“0/1/3”模式更容易出现蓝屏。尽管未来将广泛使用“0/3”模式,主要是因为上文我们提到向在64位扩展时已去掉了R1和R2,所以你必须被迫使用“0/3”模式。对计算机而言,这被称作是进步,同样,毁灭性的崩溃被认为是“古怪”行为。
    理论上,如果你可忍受一点不稳定性,或者在“0/1/3”模式中牺牲一点速度,那么应该说的很完美的。可它们在某些方面确实还存在一些缺陷,主要存在以下4点。首先是那些检验指令自己所在环的指令,另外是那些处在错误的环中却没有正确保护CPU现场的指令。最后两点是截然相反的,就是那些应引发错误却没有导致错误的指令,以及那些本不该导致错误却引发许多错误的指令。所有这些都让编写VM的天才程序员们活得不轻松。
    其中第一点是显而易见的。如果你给予操作系统R1级别的特权,当它检验自己运行所处的环时,它会返回1而不是0。如果此时运行于该系统的一段程序期望自己应该处在R0环时,那么它会因为得到的是R1而导致错误。这会导致蓝屏的出现,存储器清除或另一些不理想的后果。二元码转译技术可捕捉到这种错误,并把返回值伪装成0,但这意味着需要几十上百条指令来完成这一工作,显然速度受到极大影响。
    保护现场是一个潜在的更糟糕的问题,有些CPU里的东西在上下文开关程序中并不是很容易被保存的。那些隐藏的段寄存器状态就是一个很好的例子。一旦它们被载入主存,其中一部分无法被保存,导致内存常驻部分和CPU中实际值间的不同而引起意外中断。当然我们可为它们设立工作区,但这样做极为复杂且需付出很高的代价使之表现得聪明一些。
    那些本该引起某些问题却没有导致这些问题的指令也是摆在我们眼前的一道难题。如果你期望一条指令应在你后面的设计的中断陷阱中造成错误,但却没有,这一点也不会让人因为没有错误而高兴。与此相反的情况也极为常见,如果不在正确的环中向CR0和CR4写入,则会产生错误,导致系统崩溃。虽然这两种错误在你不注意时可被修正,但却造成很多性能损失。
    整个所涉及到的虚拟化技术就是要将操作系统放在一个它本不应该在的地方,不断地运转去尝试解决所有扑来的问题。存在许多问题,这些问题也不断的发生,所以性能损失也就没什么奇怪的了。
    解决之道
    Intel的VT技术能解决这些困扰。VT的目的是在尽可能最小化程序员痛苦的同时尽可能多的增加“virtualization holes”(虚拟化孔)。这种解决方案中,VT-X针对X86而VT-i针对Itanium,分别引入了一种新的模式针对不同的CPU。这里我们主要来看看VT-X,实际上VT-i的功能与VT-X有很多相同的地方。
    这种新的模式被称为VMX,并且引入了一个虚拟化机监控器VMM运行于其中。它被设定在R0级别下,你可以认为是R-1级或者看成是在环的旁边运行。主机操作系统和所有的程序在VMX模式中运行,与此同时VMM运行在VMX根模式中。
    任何一个运行在VMX模式下的操作系统,都拥有所有运行于非VT系统中的一般操作系统的功能和特性。它也处在R0级别中,与平常一样有权利处理每一件事情,而且并不知道有什么东西正在它的旁边运行。当情况得到授权,CPU进入VMX根模式,VMM就可以切换到其他一个运行在另一VMX实例的操作系统。这些切换被称做VM登录和VM退出。
    VT技术所表现出来的不可思议的地方就在于它将从VMX模式到VMX根模式(或从VMX根模式到VMX模式)的登录和退出处理易于操作。一旦主机操作系统被涉及到,那它一定是独自处在自己的世界里的,你必须保存虚拟化世界的完整状态并当你返回时重新载入它。虽然在VT里还有很多事物要去处理,但它被设计为一项任务,所以客观地说它实际是一个简单而并不费力的进程。
    因为每一个操作系统实例都在正确的位置运行,所以前面所提到的4个问题也就不存在了。相关联的工作区也不再需要,与此有关的系统开销没有了。这些能有效提高速度。但这些并非免费,只是付出的代价要少很多。
    启动一个新的主机操作系统,你需为其留出一块4kB的存储区并将它传递给一个VMPTLRD指令。这块区域将用来存储该系统实例不被激活时的所有状态和重要Bit位。只要该操作系统实例存在,则这块区域一直有效,直到在其上运行一条VMCLEAR指令。这样就设立了一个虚拟化机实例。
    如果你想要把控制权交给虚拟化机,你要么登录VMX非根模式或简单一点,运行VMX模式即可。这些提到的VM登录指令就是VMLAUNCH和VMRESUME,两者并没有太大的区别。VMRESUME指令只是简单地从刚开始已经初始化的4kB存储区里载入CPU状态,并把控制权交给主机操作系统。VMLAUNCH做的也是同样的工作,但它会启动一个虚拟化机控制构件VMCS,它包含一些设立VM的现场背后的记录,因为这需花费一些时间,所以人们尽量避免在并发登录时使用VMLAUNCH。
    从这一点来看,主机操作系统开始了它的愉快之旅,尽可能地运转,毫无察觉是否有其他东西正在它的一旁运行。正如过去所计划的一样,它存在于自己的世界里,全速运行,或接近全速。唯一的问题是你如何打破这一切美好的景象而将它关闭到一边,以使得机器里的其他操作系统能真正运行。这就是VT技术所体现出来的复杂的一面——VMCS中一些特别的位映像。
    这些位映像是一些32位的字段,每一个Bit位标志一个事件。如果某个事件被触发,则对应的Bit位被置位,CPU触发一条VM退出指令,并将控制权返还给运行在VMX根模式下的VMM。VMM可做任何想做的事,然后将VMRESUME指令传递给下一个操作系统,或刚离开的那个操作系统。这个被启动的操作系统同样很好地运行着,直到触发另一条VM退出指令。如此这样以每秒上千次的速度重复着。
    什么能触发这些指令呢?它们可以是引脚信号、CPU、异常和页面错误这些平台事件,所有这些都会触发VM退出指令。VT技术的完美之处在于它有很强的适应性,另一个与此类似之处就是在调试程序中设置断点,你可在每个事件上都设置一个,或者一个也不设置,这都取决于你自己。
    引脚信号事件要做的是当有一个内部中断或一个不可屏蔽中断发生时,则触发退出指令。而CPU事件,则是当你设置任意Bit位在某一字段,当相应的CPU状态接收到它时,则触发退出指令。虽然大多数指令需要去设置,但也有一些指令无条件地引发VM退出指令。这是在一个非常细小的层面上控制VM,允许每当你需要时登录和退出。
    异常位映像也是一些32位的字段,每个Bit位标志每个32位指令地址的异常情况。如果Bit位被设定并有一个异常被抛出,它就会引发VM退出指令。如果Bit位是空的或没有异常,那么主机操作系统则继续它的快乐之旅,与平常一样。这是一种从VMX模式退出而进入VMX根模式的系统开销非常低的方法。
    最后还有页面错误退出,它与异常退出十分相像,只不过它用两个32位字段来控制。这些字段内的Bit位对每一个可能出问题的页面错误代码进行映像,因此你可细心地从中挑选从哪里退出。同样,它也是基于很细小的层面,系统开销也很低。
    在计算机里,VT工作在一个比传统的R0环更有特权的级别中。任何一个主机操作系统都可在没有改变的旧有架构下运行,并且不知道一个控制程序在控制它们。当遭遇到某些用户设置的触发器,控制权将被转交给运行在更高级别的VMX根模式上的VMM。因为这是一种被动触发事件,而不需被积极监视,因此系统开销降到了最低限。
    VT技术使得安装和卸载那些比以往VM模式更稳定的运行环境变得简单。如果你需运行虚拟化系统,没有理由不用一个拥有Vanderpool功能的CPU去实现它,而软件虚拟化机会逐渐不被人关注。
    这也许不错,但必须记得,这必须付出代价。每一次登录意味着建立4kB的存储区域,每一次退出要向这4kB存储区内写入数据。这看上去有些耗费过多,可与那些较老的方式比较,它的速度惊人地快。
    在这里插入图片描述

四、常见虚拟化技术的应用实践

虚拟化,正以革命者的姿态,冲上了信息化时代的前沿。应用是王道的终极目标,加速着应用程序虚拟化技术的快速发展,中外两大厂商都在积极研发,推动着技术革新。市面上,一些远程接入厂商和应用接入厂商也积极在转型,加入应用虚拟化大军,诸多迹象表明,远程接入技术和应用接入技术必将过渡到应用虚拟化技术领域。 在IT应用高度发展的当前,应用虚拟化技术,以崭新的架构和强大的功能,突破了应用瓶颈问题,满足了巨大而迫切的市场需求。但是,作为一个刚出道不久的“新军”,其产品和技术上的成熟度有待考量。有专家认为,应用虚拟化这项前瞻性技术,要继续深入企业并最终形成成熟的信息化基础平台,性能优化、本地化输入、安全策略和虚拟打印四大参数将成为衡量这一技术的决定性因素。

在这里插入图片描述
从企业应用的需求来看,已经不再是单独的解决方案能够满足的了,而是需要是一种组合式的解决方案,形象的说就是需要“组合拳”。特别针对于企业的信息化建设,不再是单纯的技术能够解决了,而是需要多种技术组合的一个基础平台。要得最好的体验和应用,单纯的远程接入技术已经远远不能满足了,而是需要一种崭新的应用虚拟化技术来满足。这项技术已经为部分企业带来了前所未有的应用和体验。从行业发展的长远角度看,“应用虚拟化”理念得以成熟,技术上得到提高,应用实践上获得检验,标示着企业应用已经大脚步迈向应用虚拟化时代。 当然,任何一个领域的发展都不是一项技术突破或者产品研发所能主导的,它是一个长期不断的过程,必将需要整个行业共同的努力。基于市场需求,立足用户利益,以不断优化的产品积淀品牌价值,极通科技的这种发展理念或许也值得关注一番。同时也希望更多企业和有志之士投入到这份事业当中,积极探寻,使这个领域得到更为广阔的发展,为社会、为国家、为企业,为我们每一个人带来价值和贡献。
随着虚拟化应用的加速,各种应用已经不能简单的满足到远程接入这个基础作用,而是全面的从虚拟化的应用、虚拟化的管理等角度来实现。

虚拟化作为一种优化资源的方法,是将应用程序和操作系统从物理硬件中抽象出来。
戴尔提供针对特定用途设计的解决方案,可最大限度地减少通常由虚拟化带来的高成本和复杂性。DellPowerEdge服务器和EqualLogic存储的性能可满足苛刻的CPU、内存和I/O需求,能够在一个虚拟化环境中运行多个应用程序,包括I/O密集型数据库应用程序。戴尔尖端的FlexMem网桥技术(应用于PowerEdgeR810和M910服务器)可为虚拟化环境提供两倍的内存和更好的性能。因此,使用相同的软件许可成本可以获得高达两倍的内存容量,无需额外的处理器成本。
通过融合服务器管理、灾难恢复和存储配置,戴尔将所有业务就绪型配置(全面的虚拟化解决方案,包括服务器、存储、联网和软件)作为符合条件的单一、全面的解决方案予以支持,可消除虚拟化的复杂性。
这意味着您可以放心并且安全地获得所有虚拟化优势并推动企业发展。
与部署物理服务器相比,虚拟化使企业可以更快并且更高效地为用户提供新应用程序。戴尔正在申请专利的FlexMem网桥技术提供切实可行的解决方案,能够满足当今应用程序需要每个处理器核心利用更多内存的需求,从而减少在虚拟化环境中运行多个I/O密集型应用程序的性能障碍。
用户可以选择2插槽DellPowerEdge刀片式服务器和机架式服务器,同时使用多达32个DIMM插槽,从而获得一流的内存可扩展性,以及相当于每个处理器通常可用的两倍的插槽数

总结

Intel的VT技术给人们带来了惊喜,它让我们可在硬件级别上完成计算机的虚拟化工作。目前时机成熟了,Intel将首先在其桌面CPU中引入该技术,最新的Pentium 4 6系列CPU就支持VT,这让更多的用户都能涉足到新技术的应用,大大提高了用户使用CPU的效率,编写VMM不再那么困难了。
不过我们也要清醒地认识到,现有的虚拟化技术不会马上消失,相反它们会变得更为普遍且系统开销问题也正得到改善,而大型服务器提供商们也不会在现有的技术上发生巨大的变化,毕竟目前还用得过去。加上AMD公司也发布了在其64位CPU上使用Pacifica虚拟化技术,因此VT想要取代现有的计算机虚拟化技术或得到人们的认同还需一段时间。可我们相信硬件级别的虚拟化技术毋庸置疑的是未来计算机发展的方向,有着灿烂的前途。

参考文献

任总,链接:https://www.jianshu.com/p/40b44441aeb5
应用虚拟化 .云百科[引用日期2013-05-04]
益和应用接入系统(EAA)
天极网[引用日期2015-11-20] CIO
应用虚拟化五大问题亟待解决 .51cto[引用日期2012-08-20]


版权声明:本文为m0_52650404原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。