虚拟化技术

来源:互联网 发布:网络教育有哪些大学 编辑:程序博客网 时间:2024/06/02 15:17

参考文献:

虚拟化技术及其在制造业信息化中的应用综述

从1960年开始就有了虚拟化的概念,当时IBM在Cambridge科研中心大力投入研究该方向。相关开发一直在推进,但是真正的突破性进展是1999年VMware推出的虚拟化平台,最终将虚拟化成功推向了市场。正是在Vmware助力下,才开创出了hypervisor级别虚拟化的巨大市场。

虚拟化技术就是指把一个物理单元虚拟成多个逻辑单元,供多个应用一起使用。这样做的主要目的是为了提高资源的使用效率并方便管理各种资源.目前云计算模式的提出,无论是私有云,公有云,还是混合云,都需要资源的整合,统一资源为客户提供服务,这就要求系统资源具有高性能的处理能力。目前单个昂贵的服务器的处理能力仅使用到20%,造成了资源的浪费,虚拟化技术解决了上述问题,使服务器处理能力得到了充分的利用。

计算机系统的抽象层次通过分层组织,由底层的硬件和高层的软件实现。虚拟化(Virtualization)就是由位于下层的软件,通过向上一层软件提供一个与它原来所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层的软件可以直接运行在虚拟的环境上。一般来说,虚拟化的计算机通过一种叫虚拟机监控器(Virtual MachineMonitorVMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(VM)。如下图虚拟化技术ESX的结构:
 

虚拟化是指为运行的程序或软件营造它所需要的执行环境,在采用虚拟化技术后,程序或软件的运行不再独享底层的物理计算资源,它只是运行在一个完全相同的物理计算资源中,而底层的影响可能与之前所运行的计算机结构完全不同。虚拟化的主要目的是对IT基础设施和资源管理方式的简化,从虚拟化的目的来看,虚拟化技术主要分为以下几个大类:

1、平台虚拟化(Platform Virtualization,它是针对计算机和操作系统的虚拟化,又分成服务器虚拟化桌面虚拟化。服务器虚拟化是一种通过区分资源的优先次序,并将服务器资源分配给最需要它们的工作负载的虚拟化模式,它通过减少为单个工作负载峰值而储备的资源来简化管理和提高效率,服务器虚拟化抽象了硬件资源,包括虚拟BIOS、虚拟CPU、虚拟内存、虚拟设备和虚IO。虚拟服务器提供了良好的隔离性和安全性。桌面虚拟化是为提高人对计算机的操控力,降低计算机使用的复杂性,为用户提供更加方便适用的使用环境的一种虚拟化模式。平台虚拟化主要通过CPU虚拟化、内存虚拟化和I/O接口虚拟化来实现。服务器虚拟化的模型如下:

2、资源虚拟化(Resource Virtualization,针对特定的计算资源进行的虚拟化,例如,存储虚拟化、网络资源虚拟化等。存储虚拟化是指把操作系统有机地分布于若干内外存储器,两者结合成为虚拟存储器。网络资源虚拟化最典型的是网格计算,网格计算通过使用虚拟化技术来管理网络上的数据,并在逻辑上将其作为一个系统呈现给消费者,它动态地提供了符合用户和应用程序需求的资源,同时还将提供对基础设施的共享和访问的简化,当前比较火的云计算技术就是网格计算的延伸。
3、应用程序虚拟化(Application Virtualization,它包括仿真、模拟、解释技术等。Java虚拟机是典型的在应用层进行虚拟化。基于应用层的虚拟化技术,通过保存用户的个性化计算环境的配置信息,可以实现在任意计算机上重现用户的个性化计算环境。服务虚拟化是近年研究的一个热点,服务虚拟化可以使业务用户能按需快速构建应用的需求,通过服务聚合,可屏蔽服务资源使用的复杂性,使用户更易于直接将业务需求映射到虚拟化的服务资源。现代软件体系结构及其配置的复杂性阻碍了软件开发生命周期,通过在应用层建立虚拟化的模型,可以提供最佳开发测试和运行环境。除了在使用多年的JVM,2013年发布的Docker技术也是一个应用虚级化的例子,Docker技术的核心是Linux容器(LXC),container具有着一定的隔离性,各个container之间的数据和内存空间相互隔离,保证一定的安全性。Docker虚拟化的模型如下:


4、表示层虚拟化。 在应用上与应用程序虚拟化类似,所不同的是表示层虚拟化中的应用程序运行在服务器上,客户机只显示应用程序的UI界面和用户操作。表示层虚拟化软件主要有微软的Windows远程桌面(包括终端服务)、Citrix Metaframe Presentation ServerSymantec PcAnywhere等。

通常实际开发经常提到的虚拟化主要是平台虚拟化,它通过控制程序隐藏计算平台的实际物理特性, 为用户提供抽象的、 统一的、模拟的计算环境。通常虚拟化可以通过指令级虚拟化系统级虚拟化来实现。
指令虚拟化是指指令集层次上实现虚拟化,即将某个硬件平台上的二进制代码转换为另一个平台上的二进制代码,实现不同指令集间的兼容,也被称作“二进制翻译”。二进制翻译是通过仿真来实现的,即在一个具有某种接口和功能的系统上实现另一种与之具有不同接口和功能的系统。二进制翻译的软件方式,它可以有3种方式实现:解释执行、静态翻译、动态翻译。最新的二进制翻译系统的研究主要在运行时编译、自适应优化方面,由于动态翻译和执行过程的时间开销主要包括四部分:即磁盘访问开销、存储访问开销、翻译和优化开销、目标代码的执行开销,所以要提高二进制翻译系统的效率主要应减少后3个方面的开销。目前典型的二进制翻译系统主要有Daisy/BOACrusoeAeriesIA-32ELDynamo动态优化系统和JIT编译技术等。
系统虚拟化是在一台物理机上虚拟出多个虚拟机。从系统架构看,虚拟机监控器(VMM)是整个虚拟机系统的核心,它承担了资源的调度、分配和管理,保证多个虚拟机能够相互隔离的同时运行多个客户操作系统。系统级虚拟化要通过CPU虚拟化、内存虚拟化和I/O虚拟化实现。
CPU虚拟化为每个虚拟机提供一个或多个虚拟CPU,多个虚拟CPU分时复用物理CPU,任意时刻一个物理CPU只能被一个虚拟CPU使用VMM必须为各虚拟CPU合理分配时间片并维护所有虚拟CPU的状态,当一个虚拟CPU的时间片用完需要切换时,要保存当前虚拟CPU的状态,将被调度的虚拟CPU的状态载入物理CPUCPU虚拟化需要解决的问题是:
①虚拟CPU的正确运行,虚拟CPU正确运行的关键是保证虚拟机指令正确执行,各虚拟机之间不互相影响,即指令的执行结果不改变其他虚拟机的状态,目前主要是通过模拟执行和监控运行
②虚拟CPU的调度。虚拟CPU的调度是指由VMM决定当前哪一个虚拟CPU实际在物理CPU上运行,保证虚拟机之间的隔离性、虚拟CPU的性能、调度的公平。虚拟机环境的调度需求是要充分利用CPU资源、支持精确的CPU分配、性能隔离、考虑虚拟机之间的不对等、考虑虚拟机之间的依赖。
内存虚拟化主要通过VMM采用分块共享的思想来虚拟计算机的物理内存。VMM将机器的内存分配给各个虚拟机,并维护机器内存和虚拟机内存之间的映射关系,这些内存在虚拟机看来是一段从地址0开始的、连续的物理地址空间。在进行内存虚拟化后,内存地址将有机器地址、伪物理地址和虚拟地址三种地址。
I/O虚拟化是个比较复杂的地方,由于I/O设备具有异构性强,内部状态不易控制等特点,VMM系统针对I/O设备虚拟化主要有全虚拟化、半虚拟化、软件模拟和直接I/O访问等设计思路。
比较常见的几种虚拟化软件如下:
1、RedHat KVM:
      KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。
KVM包括以下两个组件:
  • 管理虚拟硬件的设备驱动,这个驱动通过一个字符设备 /dev/kvm 导出它的功能。通过 /dev/kvm每一个客户机拥有其自身的地址空间,这个地址空间与内核的地址空间相分离或与任何一个正运行着的客户机相分离。
  • 模拟硬件的用户空间部件,它是一个稍微改动过的 QEMU 进程。从客户机操作系统执行 I/O 会拥有QEMU 。 QEMU 是一个平台虚拟化方案,它允许整个 PC 环境(包括磁盘、显示卡(图形卡)、网络设备)的虚拟化。任何客户机操作系统所发出的 I/O 请求都被拦截,并被路由到用户模式用以被 QEMU 过程模拟仿真。
KVM的架构如下:

2、VmWare ESX
是由VmWare公司开发的一种架构,与KVM不同的是VMware kernel是专有的,那就意味着VMware不得不开发和维护整个协议栈,会导致开发速度会减慢,你的硬件可能要等一段时间才会得到VMware的支持。其架构如下:

3、Citrix XenServer
  为了改善虚拟机技术(Virtual Machine Monitor)的性能,一种新的准虚拟化技术(Para-Virtualizion)技术诞生了。这种虚拟技术以Xen为代表,其特点是修改操作系统的内核,加入一个Xen Hypervisor层。它允许安装在同一硬件设备上的多个系统可以同时启动,由Xen Hypervisor来进行资源调配。在这种虚拟环境下,依然需要模拟硬件设备,安装Guest操作系统,并且还需要修改操作系统的内核。Xen相对于传统的Virtual Machine Monitor,性能稍有提高,但并不十分显著。为了进一步提高性能,Intel和AMD分别开发了VT和Pacifica虚拟技术,将虚拟指令加入到了 CPU中。使用了CPU支持的硬件虚拟技术,将不再需要修改操作系统内核,而是由CPU指令集进行相应的转换操作。其架构如下:

4、Microsoft Hyper-V
      在微软Hyper-V模型中,hypervisor层直接运行于物理服务器硬件之上。所有的虚拟分区都通过hypervisor与硬件通信,其中的hypervisor是一个很小、效率很高的代码集,负责协调这些调用。
        微软的虚拟化架构如下图所示,其中最底层为服务器硬件架构,它包含AMD-V、Intel VT、DEP等硬件支持,再上层就是微软的Windows Hypervisor,在虚拟的每一个子系统之间都是通过VMbus进行通信,包括主系统Windows Server 2008在内,所有的OS都是通过VMBus的一种机制与Hypervisor进行通信,其中父分区,可简单理解为Windows Server 2008宿主系统所在分区,它与Hypervisor的通信是通过VSP传送给VMBus,再通过VMBus与Hypervisor的联系到达硬件。而子分区中的系统,是由VSC将请求发送给自已的VMBus,VMBus再与父分区的VMBus进行沟通,最后由父分区的VSP将请求传送给HyperVisor。   单独的Windows Server 2008在安装之后是直接与硬件通信,但当在系统中启用了Hypervisor,该Windows Server 2008也将作为一个Hypervisor的一个虚拟系统与其它子系统几乎是并列的存在,所不同的是Windows Server 2008作为父分区的宿主机,承载了所有子分区中虚拟系统的驱动程序。为子分区中系统的安全性又上了大大的一把锁。

还有一种硬件分区技术,硬件资源被划分成数个分区,每个分区享有独立的CPU、内存,并安装独立的操作系统。在一台服务器上,存在有多个系统实例,同时启动了多个操作系统。这种分区方法的主要缺点是缺乏很好的灵活性,不能对资源做出有效调配。随着技术的进步,现在对于资源划分的颗粒已经远远提升,例如在IBM AIX系统上,对CPU资源的划分颗粒可以达到0.1个CPU。这种分区方式,在目前的金融领域,比如在银行信息中心得到了广泛采用。如下图IBM提出的技术:


0 0