1.5 虚拟化技术分类

1.5.1 模拟器/软件仿真

  • 通过软件模拟完整的硬件环境来虚拟化来宾平台。
  • 可以模拟X86、ARM、PowerPC等多种CPU
  • 效率比较低
  • 产品或方案:QEMU、Bochs、PearPC

1.5.2 全虚拟机化full virtualization/本地虚拟化native virtualization

不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中

在全虚拟化的虚拟平台中,GuestOS并不知道自己是一台虚拟机,它会认为自己就是运行在计算机物理硬件设备上的HostOS。全虚拟化的GuestOS具有完全的物理机特性。因为全虚拟化的VMM会将一个OS所能够操作的CPU、内存、外设等物理设备逻辑抽象成为虚拟CPU、虚拟内存、虚拟外设等虚拟设备后,再交由GuestOS来操作使用。这样的GuestOS会将底层硬件平台视为自己所有的,但是实际上,这些都是VMM为GuestOS制造了这种假象。

全虚拟化/本地虚拟化不做CPU和内存模拟,只对CPU和内存做相应的分配等操作

全虚拟化又分为:软件辅助的全虚拟化&硬件辅助的全虚拟化

1.5.2.1 软件辅肋的全虚拟化

在Intel等CPU厂商还没有发布x86CPU虚拟化技术之前,完全虚拟化都是通过软件辅助的方式来实现的。

代表技术:VMware Workstation,QEMU,Virtual PC

当使用GuestOS的时候,不可避免的会调用GuestOS中的虚拟设备驱动程序和核心调度程序来操作硬件设备。与HostOS的不同在于,HostOS运行在CPU的核心态中,这就表示HostOS可以直接对硬件设备进行操作。但GuestOS作为一个运行在CPU用户态中应用程序,不能够直接的操作硬件设备。为了解决这个问题,VMM引用了两个机制―—特权解除和陷入模拟。

软件辅助的全虚拟化主要是应用了两种机制:

  • 特权解除:VMM、GuestOS、GuestApplications都是运行在Ring 1-3用户态中的应用程序代码,当GuestOS需要调用运行在核心态的指令时,VMM就会动态的将核心态指令捕获并调用若干运行在非核心态的指令来模拟出期望得到的效果(GuestOS和VMM是运行在用户态上的应用程序),从而将核心态的特权解除。解除了核心态的特权后,就能够在GuestOS中执行大部分的核心态指令了。但是,这仍然不能完美的解决问题。因为在一个OS的指令集中还存在着一种敏感指令(可能是内核态,也可能是用户态)。此时就需要陷入模拟的实现。
  • 陷入模拟:无论是HostOS还是GuestOS,只要是一个OS都必然会存在有敏感指令(reboot、shutdown等)。试想如果我们希望将GuestOS重启,并在GuestOS中执行了reboot指令,但是却将HostOS给重启了,这将会非常糟糕。VMM的陷入模拟机制就是为了解决这个问题。在GuestOS中执行了敏感指令reboot时,VMM首先会将敏感指令reboot捕获、检测并判定其为敏感指令。此时VMM就会陷入模拟,将敏感指令reboot模拟成一个只针对GuestOS进行操作的、非敏感的、并且运行在非核心态上的"reboot"指令,最后CPU执行虚拟机的重启操作

简而言之,软件辅助虚拟化能够成功的将所有在GuestOS中执行的系统内核特权指令进行捕获、翻译,使之成为只能对GuestOS生效的虚拟特权指令。之所以需要这么做的前提是因为CPU并不能准确的去判断一个特权指令到底是由GuestOS发出的还是由HostOS发出的,这样也就无法针对一个正确的OS去将这一个特权指令执行。

由于全虚拟化VMM会频繁的捕获这些核心态和敏感的指令,将这些指令进行转换之后,再交给CPU执行。所以经过了转换,导致其效率低,但全虚拟化VMM应用程序的好处在于其不需要对GuestOS的核心源码做修改,所以全虚拟化的VMM可以安装绝大部分的OS(暂时来说只有已Linux、open soralis、BSD等几种OS开源了内核代码)。

直到后来CPU厂商们发布了能够判断特权指令归属的标准x86 CPU之后,迎来了硬件辅助全虚拟化。

1.5.2.2 硬件辅助的全虚拟化 HVM(Hardware Virtual Machine)

2005年Intel提出并开发了由CPU直接支持的虚拟化技术。这种虚拟化技术引入新的CPU运行模式和新的指令集,使得VMM和GuestOS运行于不同的模式下(VMM=Root Mode;GuestOS=Non-Root Mode),GuestOS运行于受控模式,原来的一些敏感指令在受控模式下会全部陷入VMM,由VMM来实现模拟,这样就解决了部分非内核态敏感指令的陷入——模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提高了陷入――模拟时上下文切换的效率。该技术的引入使x86 CPU可以很容易地实现完全虚拟化。故皆被几乎所有之前分歧的各大流派所采用,包括KVM-x86,VMWare ESX Server 3,Xen 3.0。

虚拟化CPU形成了新的CPU执行状态Non-Root Mode和Root Mode,GuestOS运行在Non-Root Mode的Ring 0核心态中,这意味着GuestOS能够直接执行特权指令,而不再需要特权解除和陷入模拟机制。并且在硬件层上面紧接的就是虚拟化层的VMM,而不需要HostOS。这是因为在硬件辅助全虚拟化的VMM会以一种更具协作性的方式来实现虚拟化—―将虚拟化模块加载到HostOS的内核中,例如:KVM,KVM通过在HostOS内核中加载KVM Kernel Module来将HostOS转换成为一个VMM。所以此时VMM可以看作是HostOS,反之亦然。

硬件辅助全虚拟化主要使用了支持虚拟化功能的CPU进行支撑,CPU可以明确的分辨出来自GuestOS的特权指令,并针对GuestOS进行特权操作,而不会影响到HostOS。

硬件辅助全虚拟化需要物理硬件的支持,比如需要CPU必须支持并且打开虚拟化功能,例如Intel的Intel VT-X/EPT,AMD的AMD-V/RVI,以在CPU层面支持虚拟化功能和内存虚拟化技术

全虚拟化软件(硬件辅助全虚拟化):
vmware esxi
Xen3.0
KVM
Microsoft Hyper-V
vmware workstation  # https://www.vmware.com/cn/products/workstation-pro.html
VirtualBox
paralles desktop

KVM是硬件辅助的虚拟化技术,主要负责比较繁琐的CPU和内存虚拟化,而Qemu则负责I/O虚拟化,两者合作各自发挥自身的优势

1.5.3 半虚拟化para virtualization

半虚拟化是需要GuestOS协助的虚拟化。因为在半虚拟化VMM中运行的GuestOS,都需要将其内核源码进行都进过了特别的修改。

通过修改客户操作系统代码,将原来在物理机上执行的一些特权指令(主要是修改GuestOS指令集中的敏感指令和核心态指令),修改成可以和VMM直接交互的方式,实现操作系统的定制化。这样,就不会有捕获异常、翻译和模拟的过程,性能损耗比较少。

半虚拟化VMM在处理敏感指令和内核态指令的流程上相对更简单一些。让HostOS在捕抓到GuestOS内核态指令或敏感指令时,HostOS也能够准确的判断出该指令是否属于GuestOS(GuestOS知道自己是虚拟机)。这样就可以高效的避免了上述问题。典型的半虚拟化软件有——Xen、KVM-PowerPC(简易指令集)

半虚拟化除了修改内核外还有另外一种实现方法——在每一个GuestOS中安装半虚拟化软件,如:VMTools、RHEVTools。

注意:若使用KVM运行Windows时,一定要安装半虚拟化驱动Tools,否则无法工作。现在主流的半虚拟化驱动是由IBM和redhat联合开发一个通用半虚拟机驱动virtio。

半虚拟化要求guest OS的内核是知道自己运行在虚拟化环境当中的,因此guest OS的系统架构必须和宿主机的系统架构相同,并且要求对guest OS的内核做相应的修改,因此半虚拟化只支持开源内核的系统,不支持闭源的系统,比较常见的半虚拟化就是早期版本的XEN,但是Xen从其3.0版本开始,可以支持利用硬件辅助虚拟化技术(http://www-archive.xenproject.org/files/xen_3.0_datasheet.pdf),实现了完全虚拟化,可以在其平台上不加修改的直接运行如Linux/Windows等系列的操作系统,使得系统具备了更好的兼容性

xen的半虚拟化相关技术:

  • Domain 0:Domain 0是一个修改过的Linux kernel,是唯一运行在Xen Hypervisor之上的虚拟机,它拥有访问物理I/O资源的权限,同时和系统上运行的其他虚拟机进行交互。Domain 0需要在其它Domain启动之前启动。
  • Domain U:运行在Xen Hypervisor上的所有半虚拟化(paravirtualized)虚拟机被称为"Domain U PV Guests”,其上运行着被修改过内核的操作系统,如Linux、Solaris、FreeBSD等其它UNIX操作系统。所有的全虚拟化虚拟机被称为"Domain U HVM Guests",其上运行着不用修改内核的操作系统,如Windows等。

1.5.4 各虚拟化技术性能对比

虚拟机名称 开发厂商及其简介 虚拟类型 执行效率 GuestOS是否可以跨平台 许可证类型
Xen http://www.xensource.com/ 半虚拟化、完全虚拟化 非常高 可以 GPL
VMware https://www.vmware.com/ 完全虚拟化 较高 可以 私有
KVM http://www.linux-kvm.org/page/Main_Page 完全虚拟化 较高 可以 GPL
QEMU http://www.qemu.com/ 模拟 较低 可以 LGPL/GPL

1.6 虚拟化技术厂商

1.6.1 软件技术厂商

1.6.2 硬件技术厂商

英特尔® 虚拟化技术(英特尔® VT)

https://www.intel.cn/content/www/cn/zh/virtualization/virtualization-technology/intel-virtualization-technology.html

Intel从2005年开始支持在CPU中加入硬件虚拟化的支持,intel virtualazation tochnology,简称intelVT,IntelVT虚拟化技术包括分别针对CPU的增强虚拟化技术Intel VT-x、I/O虚拟化的Intel VT-d、网络虚拟化的Intel VT-c技术

1.6.2.1 Intel VT-x

Intel VT-x可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一台物理服务器内可以同时运行多个操作系统,能够降低(甚至消除)多个虚拟机操作系统之间的资源争夺和限制,从硬件上极大地改善虚拟机的安全性和性能,有助于提高基于软件的虚拟化解决方案的灵活性与稳定性,此外,Intel VT-x具备的虚拟机迁移特性还可为IT投资提供有力保护,并进一步提高故障切换、负载均衡、灾难恢复和维护的灵活性。

Intel VT Flex Priority(灵活优先级):当处理器执行任务时,往往会收到其它设备或应用发出的请求或“中断”命令。为了最大程度减少对性能的影响,处理器内的一个寄存器专用来监控任务优先级,只有优先级高于当前运行任务的请求或“中断”才被及时处理。

Intel VT Flex Migration(灵活迁移):虚拟化能够在无需停机的情况下,将运行中的虚拟机在物理服务器之间进行迁移,借助此项技术,管理程序能够在迁移池内的所有服务器中建立一套一致的指令,实现工作负载的无缝迁移

Intel VT Extended Page Tables(EPT,扩展页表):为了降低实现内存虚拟化的难度和提升内存虚拟化的性能,Extended Page Tables直接在硬件上支持虚拟机内存的逻辑地址-->虚拟机内存的物理地址-->物理服务器内存的物理地址的两次转换。

1.6.2.2 Intel VT-d

Intel VT-d技术支持直接I/O访问,虚拟机创建好之后,数据即可直接在虚拟机与为其分配的I/O设备之间进行传输,这样就加快了I/O的流动,减少VMM活动及服务器处理器的负载。

1.6.2.3 Intel VT-c

Intel VT-c技术:支持网络连接的Intel虚拟化技术,包括:虚拟机设备队列(VMDq)、虚拟机直接互连(VMDc)。

虚拟机设备队列(VMDq),最大限度提高I/O吞吐率,Intel VT-c可将网络I/O吞吐量提高一倍以上,使虚拟化应用达到接近物理服务器的吞吐率

虚拟机直接互连(VMDc):大幅提升虚拟化性能。VMDc支持虚拟机直接访问网络I/O硬件,从而显著提升虚拟机性能,这些通信链路直接绕过了VMM交换机,进一步提升了I/O性能并减少服务器处理器的负载。

1.7 云计算

1.7.1 什么是云计算

以前电脑被发明的时候,还没有网络,每个电脑,就是一个单机。用户在单机上,安装操作系统和应用软件,完成自己的工作。后来,有了网络,单机与单机之间,可以交换信息,协同工作。再后来,单机性能越来越强,就有了服务器。人们发现,可以把一些服务器集中起来,放在机房里,然后让用户通过网络,去访问和使用机房里的计算机资源。再再后来,小型网络变成了大型网络,就有了互联网(Internet)。小型机房变成了大型机房,就有了IDC (Internet Data Center,互联网数据中心)当越来越多的计算机资源和应用服务被集中起来,就变成了——“云计算(Cloud Computing)"。无数的大型机房,就成了“云端”

云计算(Cloud Computing)是概念最早是由Google前首席执行官埃里克·施密特(EricSchmidt)在2006年8月9日的搜索引擎大会上首次提出的一种构想,而"云计算"就是这种构想的代名词,云计算以虚拟化为基础,以网络为中心,为用户提供安全、快速、便捷的数据存储和网络计算服务,包括所需要的硬件、平台、软件及服务等资源,而提供资源的网络就被称为"云"。

美国国家标准与技术研究院(NIST)定义:云计算是—种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互

云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源(可以是IT和软件、互联网相关的,也可以使任意其他的服务)。提供资源的网络被称为"云"。"云"中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,取用方便,费用低廉。最大的不同在于,它是通过网络进行传输的。云是网络、互联网的一种比喻说法。过去在画图时往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象

1.7.2 云计算分类

  • 公有云:Public Cloud,通常指第三方提供商为用户提供的能够通过互联网来使用的云主机,所有入驻的用户都称为租户。公有云本质上是一种共享资源服务,最大的特点是成本低,扩展性非常好,对于对安全要求不高的中小型企业或是个人站长来说是非常好的选择。缺点是对于云端的资源缺乏控制、保密数据的安全性、网络性能和匹配性问题
  • 私有云:Private Cloud,是为使用者单独使用而构建的,是企业的专有资源,对数据保密、数据安全、服务质量都能有效控制。特点是安全性与私有化,是订制化解决方案的根本,可保证企业的数据安全与稳定
  • 混合云:Hybird Cloud,是一种混合了私有云和公有云的新型解决方案,集公有云的方便便捷与私有云的安全稳定为一体,是近年来云计算的主要模式和发展方向。企业出于安全考虑,会将敏感数据或是运行关键性的工作负载放在私有云上面,同时又希望能使用公有云的免费资源,达到安全又省钱的目的。

公有云和私有云的对比

公有云:比如阿里云/aws、 azure、金山云、腾讯云等都属于公有云,每个人都可以付费使用,不需要自己关心底层硬件,但是数据安全需要考虚

私有云:在自己公司内部或IDC自建openstack、VMware等环境

混合云:既要使用公有云,又要使用私有云,即自己的私有云的部分业务和公有云有交接,这部分称为混合云

下图为截止到2018年底,全球主要云计算厂商的营收对比:

1.7.3 云计算分层

传统IDC:直接在物理机运行服务,不能快速对业务横向扩容。

把计算机资源放在云端,如何提供给用户,又分为三种层次:

  • 第一层次,是最底层的硬件资源,主要包括CPU (计算资源),硬盘(存储资源),还有网卡(网络资源)等,即为IAAS
    laaS:Infrastructure as a service,基础设施即服务,自建基础服务(openstack)、阿里云ECS
  • 第二层次,更高级些,用户不直接使用CPU、硬盘、网卡,而是希望把操作系统,数据库软件等安装好,用户再来使用,即为PAAS
    PaaS:Platform-as-a-service平台即服务,如:公有云的RDS云数据库(Relational Database Service) , docker、Redis、SLB(Server Load Balancer)等服务。
  • 第三层次,更进一步,用户期望不但要装好操作系统等服务,还要把具体的应用软件装好,例如:邮件、OA系统等,用户可以直接使用服务,即为SAAS
    SaaS:Software-as-a-service软件即服务,如:企业邮箱、OA系统、云盘、云音乐等

1.7.4 云计算和虚拟化

面对这么多样化多层次的云计算服务,需要对资源进行调用和管理,如果人工对物理资源进行管理效率太低,需要各种软件和平台,负责对资源进行调用和管理,即所谓自动化运维管理要对物理资源进行灵活和动态的弹性管理,就需要实现"虚拟化”

通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。

虚拟化是云计算的基础。常见的虚拟化就是在一台物理服务器上,运行多台"虚拟服务器",也叫虚拟机(VM,Virtual Machine),从表面来看,这些虚拟机都是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源

云计算是—种服务模式,虚拟化是一种技术

虚拟化是云计算的重要支撑技术。云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。通过虚拟化,可以将应用程序和数据在不同层次以不同的方式展现给客户,为云计算的使用者和开发者提供便利。云计算的虚拟化过程为组织带来了灵活性,从而改善IT运维和减少成本支出。

虚拟化和云计算并不是相互捆绑的,而是可以优势互补为用户提供更优质的服务。在云计算的部署方案中,虚拟化技术可以使其IT资源应用更加灵活。而在虚拟化的应用过程中,云计算也提供了按需所取的资源和服务。在一些特定场景中,云计算和虚拟化无法剥离,只有相互搭配才能更好地解决客户需求

虚拟化和云的区别

参考链接:https://www.redhat.com/zh/topics/cloud-computing/cloud-vs-virtualization

由于两者的核心理念都是从硬件中分离资源,以创建可用的环境,所以很容易被混为一谈。虚拟化有助于创建云,但它并非实现云计算的决定性技术。你可以这样理解:
虚拟化是一种将功能与硬件分离的技术
云计算远非只是依赖于这种分离的解决方案

美国国家标准与技术协会这样描述云计算的5种功能:一个网络、池化资源、一个用户界面、置备功能、自动化资源控制/分配。虽然虚拟化可以创建网络和池化资源,但还需要其他管理和操作系统软件来创建用户界面、部署虚拟机、控制/分配资源

虚拟化和云计算的对比:

项目 虚拟化
定义 技术 方法
目的 从1个物理硬件系统创建多个模拟环 汇聚并自动化分配虚拟资源以供按需使用
用途 针对具体用途为特定用户提供打包资源 针对多种用途为用户群组提供不同资源
配置 基于镜像 基于模板
成本 资本性支出(CAPEX)高、运营支出(OPEX)低 私有云:CAPEX高、OPEX低公共云:CAPEX低、
可扩展性 纵向扩展 横向扩展
使用场景 少量服务器的环境 众多服务器的大环境