浅谈虚拟化技术分类认识


    虚拟化技术已经在信息化产业领域产生了深刻的影响,被认为是支持云计算发展炙手可热的关键技术。广义的虚拟化意味着将不存在的事物或现象“虚拟”成为存在的事物或现象的方法;侠义的虚拟化虚拟化技术专指一台物理机上可以跑多台虚拟机,共享内存、CPU、IO等硬件资源,虚拟机之间在逻辑上是相互隔离的。

    虚拟化技术经过这些年的发展,已经成为一个庞大的技术家族,从其分类来看,也是众说纷纭。下面从我对虚拟化技术学习与认知,本文将从虚拟化的应用、技术、产品以及实现四个角度进行分类;

一、 虚拟化应用分类


服务器虚拟化

​服务器虚拟化是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,我们不再受限于物理上的界限,而是让CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力。

​简单理解就是在一台或多台配置很高的服务器(后面称宿主机)上安装众多虚机(后称服务机),(虚机里安装如Linux OS、Windows Server 2008, 2012等操作系统),让这些虚机共享宿主机的CPU,内存,存储以及I/O等资源,并作为服务器对外提供服务。在服务器虚拟化方面Vmware 一直处于行业领先地位。它是属于IaaS,即基础设施即服务。


存储虚拟化

​官方解释是这么说的,存储虚拟化就是对存储硬件资源进行抽象化表现。通过将一个(或多个)目标服务或功能与其它附加的功能集成,统一提供有用的全面功能服务。

存储虚拟化,可以将异构的存储资源组成一个巨大的“存储池”,对于用户来说,不会看到具体的磁盘、磁带,也不必关心自己的数据经过哪一条路径通往哪一个具体的存储设备,只需要使用存储池中的资源即可。从管理的角度来看,虚拟存储池可以采取集中化的管理,可以由管理员根据具体的需求把存储资源动态地分配给各个应用。


平台虚拟化

​平台虚拟化是集成各种开发资源虚拟出来的一个面向开发人员的统一接口,软件开发人员可以方便的在这个虚拟平台中开发各种应用并嵌入到云计算系统中,使其成为新的服务供用户使用,平台虚拟化是属于PaaS(Platform as a Service)层,该技术相对于IaaS和SaaS 的发展是滞后的,但该技术会是一种趋势,典型的docker 就属于平台虚拟化。


桌面虚拟化

​什么是桌面虚拟化? 官方解释是这么说的,将计算机的终端系统(也称作桌面)进行虚拟化,以达到桌面使用的安全性和灵活性。可以通过任何设备,在任何地点,任何时间通过网络访问属于我们个人的桌面系统。

​简单理解就是在一台或多台配置较高的服务器(后称宿主机)上安装众多虚机(后称客户机),(虚机里安装如win XP ,win 7 ,win 10 等操作系统),让这些虚机共享宿主机的CPU,内存,存储以及I/O等资源,并作为桌面服务对外提供给用户使用。从字面上看与服务器虚拟化很相似,但不同的是客户机相对服务机来说配置要求就没有那么高,而最明显的区别是客户机始终是需要将桌面呈现给客户操作,即用户必须看到并登陆桌面操作使用;而服务机一般则不需要,一般都是管理员或技术人员安装或升级服务的时候才会登陆到服务器上。桌面虚拟化拥有服务器虚拟化的所有优点。

​尽管桌面虚拟化与服务器虚拟化看上去比较相似,尽管VMware在服务器虚拟化方面一直处于行业领先,但是在桌面虚拟化以及后面说到的应用虚拟化方面 Citrix 思杰一直是处于领先地位。同样的,如果对照云计算架构,它是属于IaaS,PaaS还是SaaS,感觉都不太合适,有人称它为DaaS,也就是桌面即服务。


这里举个例子:

​  假设在一台服务器上创建出来10台虚机,然后我们可以将这10台虚机分配给10个用户,每个用户可以通过多种方式连接到分配给他的虚机进行办公,相互不会有任何干扰;当用户在本地终端显示服务端创建的虚机桌面时,这就是桌面虚拟化的应用。真实桌面不是跑在终端而是跑在后台服务器或是数据中心的。

​桌面虚拟化可以简单的看成把电脑的数据线拉长。在一个本地终端上显示远端运行的桌面,那用户目前有哪些方式或借助哪些途径来使用桌面呢?具体有:

1、Microsoft 微软的RDP方式,如我们常用的mstsc远程连接;
2、VMware 的PcoIP方式;
3、Citrix 思杰的ICA方式 ;
4、Red Hat 红帽的Spice 方式;


应用虚拟化

​ 什么是应用虚拟化?官方解释是这么说的,应用程序虚拟化是将应用程序与操作系统解耦合,为应用程序提供了一个虚拟的运行环境。在这个环境中,不仅包括应用程序的可执行文件,还包括它所需要的运行时环境。从本质上说,应用虚拟化是把应用对低层的系统和硬件的依赖抽象出来,可以解决版本不兼容的问题。

​ 简单理解就是在一台服务器上安装多台虚机,再在其中一台虚机上安装应用程序(如office软件),通过一定的技术将该应用程序及运行环境一起打包并分配给桌面虚拟机(相对普通虚拟机而言,它就是前面说桌面虚拟化)对外提供服务。和桌面虚拟化技术一样,应用程序不是存在本地电脑上,也是在后台的数据中心里,只是桌面虚拟化推送的是整个桌面,而应用程序虚拟化推送的是某个应用程序,用户只能看到应用程序。这里强调的应用程序虚拟化,应该处于SaaS层。

典型的有:

Citrix 思杰的XenApp;

VMware 的ThinApp;


二、虚拟化技术分类

这些虚拟化应用具体又用到哪些虚拟化技术呢,主要包括以下几类:


CPU虚拟化技术

​CPU虚拟化是VMM中最重要的部分,因为访问内存或者I/O的指令本身就是敏感指令(客户机的特权指令),所以内存虚拟化和I/O虚拟化都依赖于CPU虚拟化。

​在x86体系架构中,处理器有4个运行级别,分别为Ring0、Ring1、Ring2和Ring3,其中Ring0级别最高,操作系统内核就运行在Ring0层,因为它需要直接控制和修改CPU的状态,而应用程序一般运行在Ring3 级别。

​我们可以通过软件虚拟化技术来实现VMM,但这会增加系统的复杂度以及带外额外的性能开销,目前,两大CPU厂商Intel 和 AMD 都已经在其CPU硬件上加入了专门针对虚拟化技术的支持,使其性能几乎能达到物理机水平。常见的KVM 搭建虚拟机就需要硬件基于支持。


内存虚拟化技术

​ 从操作系统的角度,对物理内存有两条基本认识:

1)内存都是从物理地址0开始的;

2)内存地址都是连续的,或者说至少在一些大的粒度上连续;

​ 但是在虚拟环境下,由于VMM 与客户操作系统对物理内存的认识上存在冲突,造成了物理内存的真正拥有者VMM必须对客户机操作系统所访问的内存地址进行虚拟化,使模拟出来的内存符合客户机操作系统的两条基本认识,这个模式过程就是内存虚拟化;为了达成上述两条基本认识,内存虚拟化引入了一层新的地址空间—客户机物理地址,这个地址不是真正的物理地址,而是又VMM管理的“伪”物理地址。

当引入客户机地址后,内存虚拟化的主要任务就是处理以下两个方面的问题:

1)实现地址空间的虚拟化,维护宿主机地址与客户机物理地址之间的映射关系;这个问题可以通过两次地址转换来支持地址空间的虚拟化,即客户机虚拟地址(GVA)->客户机物理地址(GPA) -> 宿主机物理地址(HPA)。在这个上 Intel VT-x 提供了一种EPT内存虚拟化技术以及 AMD提供了一种NPT内存虚拟化技术都支持在CPU硬件上自动完后。

2)截获宿主机对客户机物理地址的访问,并根据所记录的映射关系,将其转换成宿主机的物理地址。这个问题从实现来说比较复杂,尤其是还要考虑性能问题。


I/O 虚拟化技术

​性能和通用性是I/O虚机技术的两项重要指标,其不同于CPU和内存虚拟化多由硬件支持实现,如intel VT-x、VT-d等IA架构扩展,还有EPT页表等;客户机可以使用的设备大致可分为三类:

设备模拟: 完全由纯软件模拟的设备;如qemu 来模拟设备。该方法最大的好处就是通信性强,不需要专用的驱动,但是缺点也很明显,那就是性能比较底下;一般不适合产品发布与应用。

设备半虚拟化: 实现半虚拟化设备,如qemu/kvm 中采用Virtio 半虚拟化设备来解决纯软件模拟设备效率低下的问题,但是客户端机需要安装相应的驱动。

PCI 设备直接分配 (PCI device assignment): 也称为设备透传,如,Intel VT-d 技术引入DMA重映射硬件,以提供设备重映射和设备直接分配的功能;但使用这种方式有一个缺点就是一个物理设备资源只能分配给一个虚机使用,为了实现多个虚机公用同一物理设备资源并设备直接分配,PCI-SIG组织发布了一个I/O虚拟化技术标准——SR-IOV。

​ SR-IOV 是PCI-SIG 组织发布的一个新规范,目的是消除VMM对虚拟化I/O操作的干预,以提高数据传输的性能。这个规范定义了一个标准机制,可以实现多个设备的共享,它继承了Passthrough I/O 技术,绕过VMM 直接发送和接收I/O数据,同时利用IOMMU 减少内存保护和内存地址转换的开销。


三、虚拟化产品分类


VMware

​VMware 可以说是虚拟化的鼻祖,现在很多公司都是在模仿 VMware 的产品,像应用过 VMware 虚拟机的朋友应该不陌生了,VMware 提供了很多的虚拟化产品,从服务器到桌面都有很多应用。主要有面向企业级应用的 ESX Server,面向服务端的入门级产品 VMware Server,面向桌面的主打产品 VMware Workstation(这个相信大家经常用),面向苹果系统的桌面产品 VMware Fusion,还有提供整套虚拟应用产品的 VMware vSphere,细分的话还有 VMware vStorage(虚拟存储),VMware vNet(虚拟网络)等。


Hyper-V

​Hyper-V 是微软的一款虚拟化产品,是微软首个采用类似VMware 和开源Xen 一样的基于Hypervisor的技术。其采用微内核结构,兼顾了安全性和性能的要求。从架构上来说,Hyper-V只有“硬件—Hyper-V—虚拟机”三层,本本身非常小巧,代码简单,其不包含任何第三方驱动程序,所以安全可靠,执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。


Xen

​Xen 是一款开源虚拟机软件,Xen 从一开始是作为一个半虚拟化的解决方案出现的。因此,为了支持多个虚拟机,内核必须针对Xen 做出特殊的修改才可以运行,但是到了2005 年,intel开始为Xen 添加硬件虚拟化的支持,在多方的努力下,从Xen 3.0开始正式支持Intelde VT 技术和IA64 架构,从而使得Xen 虚拟机可以运行完全没有修改过的操作系统。

​ 熟悉Xen 这款开源虚拟化解决方案都知道,其架构主要包含3个部分:

1)Xen Hypervisor:直接运行硬件之上,是Xen 客户操作系统与硬件资源之间的访问接口;

2)Domian 0:运行在Xen 管理程序之上,是具有直接访问硬件和管理其他客户操作系统特权的客户操作系统;

它作为一个特殊的虚拟机存在。是经过修改的Linux内核,是运行在Xen Hypervisor 之上独一无二的虚拟机,拥有访问物理I/O资源的特权,并且可以与其它运行在Xen Hypervisor 之上的虚拟机进行交互,所有的Xen 虚拟环境都必须先运行Domain 0,然后才能运行其它的虚拟客户机。

3)Domain U :指运行在Xen 管理程序之上的普通客户操作系统或业务操作系统,其不能直接访问硬件资源。


KVM

KVM 是Kernel-based Virtual Machine 的简称,中文全称叫内核虚拟机,也是一款开源软件,于 2007 年 2 月被集成到了 Linux 2.6.20 内核中,成为了内核的一部分。它使用Linux 自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM 采用的是基于 Intel VT 或者AMD V 的硬件辅助虚拟化技术,但是仅有KVM模块是远远不够的,因为用户无法直接访问控制内核模块去做事情,因此,必须有一个用户空间的工具才行,这个辅助的用户空间工具,开发者可以选择已经成型的开源虚拟化软件qemu,qemu是强大的虚拟化软件,kvm使用了qemu的基于X86的部分,并稍加改造,形成了可控制的KVM内核模块的用户空间工具,因此我们常听到或见到的都称作qemu-kvm。

​对于KVM用户空间工具,尽管qemu可以创建和管理KVM虚拟机,但是由于其工具效率不高,不易于使用,RedHat 为KVM开发了更多的辅助工具,如libvirt,virsh,virt-manager等。

​KVM模块是KVM虚拟机的核心部分。其主要功能包括:初始化CPU硬件,打开虚拟化模式,将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。其初始化过程如下:

1)初始化CPU硬件:KVM是基于硬件进行虚拟化,CPU必须支持虚拟化技术。

2)打开cpu控制寄存器CR4中的虚拟化开关,并通过执行特特定指令将宿主机操作系统至于虚拟化模式中的根模式。

3)KVM 模块创建特殊设备文件/dev/kvm,并等待来自用户空间的命令。


四、虚拟化实现分类


虚拟化技术的大致分类情况,即分为全虚拟化、半虚拟化和硬件辅助虚拟化3大类。而我们虚拟化技术最主要的虚拟主体就是我们的硬件CPU、内存和IO;或着说细分下来,我们又可以分为:

  • CPU的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术,
  • 内存的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术
  • IO设备的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术。

完全虚拟化**:full-virtulization

全虚拟化技术:最初所使用的虚拟化技术就是纯软件的全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层–Hypervisor,或者叫做虚拟机管理程序(VMM)。在客户机操作系统看来,完全虚拟化的虚拟平台和现实平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上,这样的虚拟平台可以运行现有的操作系统,无须对操作系统进行任何修改,因此这种方式被称为完全虚拟化。

进一步说,客户机的行为是通过执行反映出来的,因此VMM需要能够正确处理所有可能的指令。在实现方式上,以x86架构为例,完全虚拟化经历了两个阶段:软件辅助的完全虚拟化和硬件辅助的完全虚拟化。

cpu的软件全虚拟化其主要用到模拟仿真技术二进制翻译技术

半/准虚拟化技术

半虚拟化技术是后来才出现的技术,半虚拟化技术英文是paravirtualization,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高;比较具有代表性的产品是Xen,其早期版本主要采用Hypercall技术实现敏感指令或特权指令的处理;

半虚拟化的思想就是,让客户操作系统知道自己是在虚拟机上跑的,工作在非ring0状态,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式,这种方式是可以和VMM约定好的,这就相当于,通过修改代码把操作系统移植到一种新的架构上来,就像是定制化。所以XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么早期版本XEN半虚拟化只支持虚拟化Linux,无法虚拟化windows原因,微软不修改代码无法实现半虚拟化。

硬件辅助全虚拟化技术

在硬件还未提供很好的支持之前,基于软件的虚拟化技术已经给出了两种可行的解决方案:全虚拟化和半虚拟化。这里说的硬件主要是指CPU和内存,随着Intel 的VT-x和AMD 的AMD-V硬件虚拟化技术的提升,已经能将CPU和内存的性能提高到真机水平;但是设备(如磁盘、网卡)是有数目限制的,尽管VT-d技术已经可以做到一部分硬件隔离,但是大部分情况还是需要软件进行模拟,在全虚拟化的情况下是通过类似qemu进行模拟,而半虚拟化则可以通过虚拟机之前共享内存的方式利用特权虚拟机的设备驱动直接访问硬件,从而达到更高效的性能水平。在全虚拟化情况下,为了提升I/O性能,如qemu/kvm 会通过在虚拟化中安装VirtIO 前端驱动(相当于修改客户机操作系统)来与qemu中VirtIO后端驱动进行协作,从而达到更高效的性能水平。可以预测,该技术将是未来虚拟化技术的核心。

前面半虚拟化驱动中说到,早期版本Xen 半虚拟化技术由于需要修改操作系统,因此不能虚拟化不经修改的windows 操作系统,但是有从事Xen虚拟化工作的朋友一定知道在Xen上是完全可以跑Windows的虚机的,这其中的原因就是在2005年末,Intel开始努力完善并加强自己的硬件虚拟化产品,发布了具有Intel VT虚拟化技术的一系列处理器产品,AMD差不多也在2006年的时候开始发力,大力支持通过硬件虚拟化技术来优化产品的性能。因此后面发布的Xen 3.0以上版本就开始支持全虚拟化,即不需要修改操作系统就可以运行Windows 客户机。



参考文献:

https://www.cnblogs.com/echo1937/p/7222606.html

https://blog.csdn.net/mumuriyue/article/details/85714900

云计算虚拟化技术与开发

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值