虚拟化技术概述

计算资源服务化是云计算的一大难点。

  • 虚拟化相对于真实,将原本存在于真实环境上的计算机系统或组件运行在虚拟出来的环境中
  • 虚拟化的不同层次
    • 硬件资源
    • 操作系统
    • 操作系统的应用程序接口
    • 应用程序
  • 虚拟化是表示计算机资源的抽象方法,通过虚拟化可以用与访问抽象前资源一致的方法来访问抽象后的资源。这种资源的抽象方法并不受实现、地理位置或底层资源的物理配置限制。
  • 虚拟化的对象是各种各样的资源,经过虚拟化后的逻辑资源对用户隐藏了不必要的细节,用户可以在虚拟环境中实现其在真实环境中的部分或全部功能。
  • 云与虚拟化:云汇聚资源,提供服务;汇聚的资源本质上就是资源的虚拟表示。
  • 虚拟化典型架构
    • 基础设施虚拟化
      • 网络:VPN,VLAN
      • 存储虚拟化:RAID,NAS网络附加存储,SAN存储局域网
    • 系统虚拟化
    • 软件虚拟化:JAVA虚拟机
  • 虚拟还的好处

    • 降低运营成本
    • 提高应用兼容性
    • 加速应用部署
    • 提高服务可用性
    • 提升资源利用率
    • 动态调度资源
    • 降低能耗

      服务器虚拟化

      服务器虚拟化的特性

  • 服务器虚拟化

    • 将虚拟化技术应用于服务器上
    • 物理服务器虚拟化为多个虚拟服务器
    • 虚拟服务器
      • 虚拟BIOS
      • 虚拟处理器
      • 虚拟内存
      • 虚拟设备与I/O
  • 目标
    • 建立动态、自动化虚拟IT环境的基础
    • 高性能、可扩展性和稳定性
    • 同一个物理服务器上运行多个 VM
    • 方便的部署
    • 支持多种 IT 需求
  • 核心技术

    • 计算虚拟化
    • 存储虚拟化
    • 设备与I/O虚拟化
    • 网络虚拟化
    • 容器虚拟化
    • 实时迁移技术

      计算虚拟化

      CPU虚拟化

  • 传统方式:时间片轮转,短进程优先,中断,本质是CPU的调度机制

  • CPU全虚拟化
    • 通过软件模拟物理主机的硬件设备
    • 虚拟机的操作系统执行核心指令时由于不具备权限会触发异常
    • Hypervisor捕获异常将该指令拦截,翻译成物理机的指令, 提交到物理机硬件完成指令计算任务,再将结果返回虚拟 机
    • 每个虚拟机的核心指令都被单独的翻译执行,可以进行很 好的隔离、封装和管控
    • 执行过程中需要经过复杂的异常捕获和处理的流程
    • Hypervisor和虚拟机之间的内存空间需要进行保护和执行 环境切换
  • CPU半虚拟化
    • 为了提高执行性能,核心关键是需要解决执行虚拟机 操作系统核心指令时由于缺少权限导致的异常和异常 处理过程
    • 对虚拟机的操作系统内核进行改造,使得虚拟机操作 系统内核能够共享物理机底层硬件调用
    • 当虚拟机操作系统执行核心指令时,由于被替换成对 Hypervisor的物理机硬件调用,可以有效的提高执行 效率
    • 除CPU之外,Hypervisor层也可以提供直接对内存、 磁盘等其他硬件的访问
    • 提高了执行效率
    • 需要修改虚拟机操作系统的内核,相当于虚拟机上安 装操作系统需要安装一个特殊的定制版
    • 个人理解是虚拟机负责指令翻译
  • CPU硬件辅助虚拟化

    • 在CPU中增加了相应的处理模块
    • 虚拟机要执行一条核心指令时会引发一个中断
    • 虚拟机会被挂起并且CPU会被分配给Hypervisor检查引发 虚拟机中断的指令
    • 根据被挂起时所保存的信息,CPU硬件模仿虚拟机的CPU 状态并执行相应核心指令
    • 操作完毕后Hypervisor会恢复虚拟机的状态并继续执行
    • 将原本是软件层面进行的操作转为通过硬件模拟实现

      GPU虚拟化

  • 虚拟显卡(软件模拟的方式)

    • 虚拟网络计算机VNC
      • 有VNC Server和VNC viewer两部分组成
      • 前者完成计算交由后者负责显示
      • 物理机和虚拟机共享帧缓冲区,由物理机基于特权域的VNC服务 器,将更新的显示内容放入缓冲区内,由虚拟机通过VNC协议获 取并显示。
    • VMGL
      • 在虚拟机操作系统部署一个与标准OpenGL库接口相同的伪库
      • 伪库实现了指向物理机的远程调用用来取代原有标准OpenGL库直 接调用本地物理硬件
      • 虚拟机本地的所有OpenGL调用都被转换成对物理机的服务请求
      • 物理机的操作系统需要安装标准的OpenGL库,通过响应请求使用 GPU完成计算并将执行结果反馈给虚拟机进行显示
  • 显卡直接调用
    • 物理主机将GPU单独分配给某一虚拟机,虚拟机操作系统使用物理机原生驱动和硬件
    • 不支持实时迁移等特性,兼容性也较差
    • 给虚拟机提供了一种可以绕开Hypervisor管理的直接访问物理机I/O设备的接口
  • 显卡虚拟化

    • 将显卡时间进行切片,然后将显卡时间分配给虚拟机使用

      存储虚拟化

      内存虚拟化

  • 最关键的问题是实现一套地址翻译机制

  • 在物理机上,本身就有虚拟内存
  • 上面再加一层虚拟机,映射关系为
    虚拟机逻辑地址GVA——虚拟机机器地址GPA——物理机逻辑地址HVA——物理机机器地址HPA
  • 影子页表法
    • Hypervisor为虚拟机的操作系统内存页表设计一套对应的影子页表,然后将影子页表装入物理机的MMU中,完成从GVA到HPA的直接映射
    • 虚拟机中的每个进程都有自己的虚拟地址空间
    • Hypervisor要为虚拟机中的每个进程内存页表都维护一套 对应的影子页表
    • 当虚拟机进程访问内存时,需要将该进程的影子页表装入 物理机的MMU中完成地址转换
    • 本质上纯靠软件方式实现,影子页表本身需要占用大量内存空间
  • EPT/NPT

    • 硬件上同时支持GVA-GPA和GPA-HPA的地址转换
    • 其中GVA-GPA映射仍然由虚拟机操作系统维护
    • Hypervisor为每个虚拟机维护GPA-HPA的映射
    • 每个虚拟机只需要一个GPA-HPA的映射表,极大的减少了 内存开销
    • 虚拟机中发生了内存页面fault异常,可直接由虚拟机的 操作系统处理,减少了CPU的开销。

      磁盘虚拟化

  • 磁盘虚拟化主要有两类:面向网络连接的存储,代表性的有NAS;面向本地物理存储的,代表性的技术是SAN

  • SAN存储区域网络
    • 磁盘的读写以扇区为基本单位,磁盘上的每个磁道被等分 为若干个弧段,每个弧段称之为扇区
    • 磁盘的物理读写以扇区为基本单位,扇区是磁盘最小的物 理存储单元
    • 操作系统将相邻的扇区组合在一起,形成一个存储块,块是操作系统中文件系统读写数据的最小单位
    • SAN是一种专门为存储建立的独立于TCP/IP网络之外的专 用存储网络,通过交换机连接存储设备形成一个存储网络 供用户访问
    • 代表性技术是RAID
  • 网络接入存储NAS

    • 面向存储内容目前主要是面向文件进行虚拟化和管理
    • NAS是一种远程文件服务
    • 文件访问被重定向到使用NAS远程协议的存储设备来执行文 件的读写等操作,实现文件共享和集中数据管理
    • 由于文件的访问最终仍然需要磁盘的访问,NAS最终会在文 件被存储的存储设备上将文件的I/O请求转换为存储设备的 块的访问
    • NAS和SAN都实现了数据的集中存储与集中管理
      • 对传统的单机使用磁盘进行了扩展
      • 为了更加通用的表示数据,还出现了面向数据对象等
      • 随着技术的发展,对磁盘存储空间块的访问和块上数据的组 织结构如文件的访问越来越趋于统一,二者的界限也越来越 模糊

        设备与I/O虚拟化

  • DMA

    • 一个完整的DMA传输过程包括DMA请求、DMA响应、 DMA传输、DMA结束4个步骤
    • DMA传输过程中不需要CPU参与,无需CPU直接控制传输,所以CPU就不需要采取中断保留和恢复现场
  • 软件方式实现

    • Hypervisor通过软件方式虚拟化物理硬件的I/O接口,为 虚拟机呈现一系列标准的虚拟设备
    • 将虚拟机对硬件的访问请求翻译成对物理硬件设备的请求
    • 统一、标准化的接口 ,进行操作指令的转译
    • 相对于CPU和内存,显卡、磁盘均属于I/O设备

      网络虚拟化

  • 物理机实现物理机网卡资源的虚拟化

    • 将物理网卡虚拟成多个虚拟网卡vNIC
    • Hypervisor利用调度手段将物理网卡接收到的数据分配给 对应的虚拟机实现vNIC功能
    • 或者将物理网卡分时分配给虚拟机
  • 虚拟机之间的通信
    • 虚拟交换机VEB
    • TAP/TUN是Linux实现的对虚拟网络设备,每个虚拟机都有这样的网络设备
  • 组织虚拟网络

    • VLAN
    • VPN:实质上就是利用加密技术在公网上封装 出一个数据通讯隧道

      实时迁移技术

  • 实时迁移技术

    • 将整个虚拟机的运行状态完整、快速地从原宿主机的硬件 平台转移到新的宿主机硬件平台
    • 实时性
    • 内存页面不断滴从源虚拟机监视器拷贝到目标虚拟机监视 器,拷贝结束后,目标虚拟机开始运行,虚拟机监视器切换到 目标虚拟机上,源虚拟机终止
    • 广泛应用于实时系统的硬件维护
  • 热迁移应用领域

    • 计算机共享
    • 关键备份
    • 环境重现
    • 系统硬件维护

      容器虚拟化

  • 服务器虚拟化的一大问题是层层管理增加了很多开销,导致了大量的冗余

  • Linux Container
    • 一种内核虚拟化技术,提供轻量级的虚拟化
    • 隔离进程和资源
    • 不需要提供指令解释机制以及全虚拟化的其他复杂性
    • 有效地将由单个操作系统管理的资源划分到独立的组中
    • 在独立的组间平衡资源使用需求冲突
  • 实现方式
    • cgroups子系统,可以为特定的进程组限定可以使用的资源
    • 每个子系统有自己的namespace
  • Docker

    • 基于进程容器(Processcontainer)的轻量级VM解决方案
    • PaaS提供商dotCloud开源的最早基于LXC的高级容器引擎
    • 基于go语言遵从Apache2.0协议开源
    • 进行高级封装,提供各种辅助工具和标准接口是的更加简洁易用
    • 容器包含应用和它所有的依赖,但是与其它containers共 享操作系统内核
    • Docker容器并不是只能运行在特定的架构上

      其他虚拟化技术

      桌面虚拟化

  • 可以通过瘦客户端或其他与网络相连的设备访问跨平 台的应用程序,以及整个客户桌面

    应用虚拟化

  • 将应用与底层系统和硬件相分离

  • 屏蔽了可能与其他应用产生冲突的内容
    • 动态链接库
  • 无需安装、卸载
  • 下载、自动部署、关闭

    Serverless架构

    代表性虚拟机

  • KVM

    • Kernel-based Virtual Machine
    • 开源虚拟化模块
    • 集成在Linux的各个主要发行版本中
    • 使用Linux自身的调度器进行管理
    • CPU管理——Intel VT-x技术
    • 内存管理——影子页表法
    • 设备管理——I/O数据包转发
  • Xen
  • VMware ESXi
  • Microsoft Hyper-V

思考题

  • 虚拟化的概念
  • 服务器虚拟化的特性
  • 服务器虚拟化的关键技术
  • 其他虚拟化的相关技术
  • 典型虚拟机
  • 虚拟化与云计算的关系