云计算虚拟化技术表现方式 (云计算虚拟化技术与应用答案)

虚拟化概述

虚拟化是一种广泛使用的技术,支撑了几乎所有现代云计算和企业基础设施。开发人员基于虚拟化功能可以在单台机器上运行多个操作系统,从而完成软件测试而不会存在破坏主计算环境的风险。虚拟化为芯片和基础设施带来了许多特性,包括良好的隔离性、不同资源的可及性、同一资源的工作负载平衡、隔离保护等。

Hypervisor简介

Hypervisor也叫虚拟机监视器VMM(Virtual Machine Monitor),是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机。

Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

hypervisor为操作系统提供独立的虚拟硬件平台,而虚拟硬件平台反过来又提供对底层机器的虚拟的完整访问。hypervisor之于操作系统类似于操作系统之于进程。

虚拟化就是隐藏底层物理硬件,让多个操作系统可以透明地使用和共享硬件资源的一种技术手段。这种架构的另一个更常见的名称是平台虚拟化。

在典型的虚拟化分层架构中,提供平台虚拟化的层称为 hypervisor (有时称为虚拟机管理程序或 VMM)。虚拟操作系统称为虚拟机(VM)。下图展示了常用硬件虚拟化的简单分层架构,当然并不是所有虚拟化解决方案都是一样的。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

Hypervisor的两种类型

hypervisor 可以划分为两大类。一种是直接运行在物理硬件之上的,例如基于内核的虚拟机KVM,它本身是一个基于操作系统的hypervisor。另一种是运行在另一个操作系统中,例如QEMU 和 WINE。

Hypervisor是虚拟化功能最核心的支持组件。Hypervisor主要负责处理虚拟机下陷和管理实际物理资源等功能。Hypervisor主要可以分为两大类:

  • 原生独立的Hypervisor,一般称为Type1 Hypervisor。这类Hypervisor以最高权限运行,控制和管理所有物理资源。在这类Hypervisor运行过程中,与每个虚拟机相关的资源管理和调度功能可以卸载到该虚拟机的操作系统中实现,这样管理程序可以专注于与虚拟化相关的功能。这类Hypervisor典型的案例有QNX Hypervisor和Xen Hypervisor等。
  • 主操作系统内嵌Hypervisor扩展,一般称为Type2 Hypervisor,基本管理功能可以通过主机操作系统实现,Hypervisor扩展只专注于虚拟化支持,与主机操作系统配合实现虚拟化功能。这类Hypervisor典型的案例有Linux KVM等。

对应于ARM异常处理体系结构,通常虚拟机操作系统的应用程序或用户空间处于EL0安全等级。虚拟机操作系统的内核态空间处于EL1安全等级。为了支持虚拟化扩展引入EL2安全等级。

  • 对于Type1 Hypervisor:属于虚拟机操作系统用户态空间在EL0安全等级,虚拟机操作系统内核态在EL1安全等级,独立的Hypervisor在EL2安全等级。
  • 对于Type2 hypervisor:虚拟机操作系统用户态空间和宿主机操作系统的用户态空间都在EL0 安全等级,虚拟机操作系统内核态在EL1安全等级。带有Hypervisor扩展的宿主机操作系统内核态空间在EL2安全等级。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

hypervisor的构成

hypervisor仅是一个从其虚拟操作系统抽象机器硬件的分层应用程序。通过这种方式,每个虚拟操作系统看到的仅是一个VM而不是真实的硬件机器。

在较高级别上,hypervisor需要少量设施启动虚拟操作系统:一个需要驱动的内核映像、一个配置(比如 IP 地址和所需的内存量)、一个磁盘和一个网络设备。磁盘和网络设备通常映射到机器的物理磁盘和网络设备(如图所示)。最后,需要使用一组虚拟操作系统工具启动和管理虚拟操作系统。

CPU虚拟化

CPU虚拟化概述

CPU或处理器可以为VM提供虚拟处理器的抽象,并执行特定VM的相应指令。通常来说,Hypervisor管理程序直接在物理CPU上执行,占用物理资源并直接使用物理CPU的ISA。而虚拟机操作系统基于虚拟处理器的抽象占用相关资源并执行相关指令,除了需要更高权限的动作外,大部分场景也可以直接使用物理CPU资源和物理CPU的ISA。

Hypervisor和VM的协同管理是通过虚拟机下陷机制实现的,通常这种下陷是VM或应用需要更高的权限才能执行的时候会产生。在ARM架构中,上面介绍的对虚拟化的异常处理等级,VM和应用程序最多可以拥有EL1权限,因此对于不允许执行的指令,将触发虚拟机陷阱。详细流程如下:

  • 通常情况下,VM在物理CPU上运行其指令,与没有Hypervisor的情况下一样;
  • 当虚拟机操作系统或应用程序试图执行一条超出执行权限的指令时,触发虚拟机下陷,虚拟机操作系统做上下文切换,切到Hypervisor程序;
  • 发生虚拟机陷阱后,Hypervisor接管现场,并保存虚拟机的上下文,之后处理虚拟机操作系统开启的任务;
  • 当Hypervisor完成任务后,恢复VM的上下文并将执行权限交还给VM。

内存虚拟化

内存虚拟化配合CPU虚拟化,可以保证所有VM都有独立的内存空间,并严格按照权限进行隔离。而内存虚拟化的关键要求是地址管理,根据上下文配置和控制各个VM对物理内存的访问。

内存虚拟化通常是与通过内存分配和释放的管理相结合来实现的。从硬件实现视角,通常的内存虚拟化是通过控制两级地址翻译来实现的。Hypervisor和VM的内存分配和释放机制都和典型的操作系统内部内存分配和释放的机制类似,使用基于分级页表实现内存管理。

ARM内存管理体系

ARM架构中采用基于页表的两级地址翻译机制。通常来说,第一层级转换将虚拟地址VA转换为中间物理地址IPA,这一层级地址翻译由操作系统管理和控制。而第二层级地址翻译则将中间物理地址IPA转换为物理地址PA,这一层级地址翻译由Hypervisor管理和控制。这两个阶段的翻译是相互独立,互不干扰的。连续的虚拟页地址可以映射到离散的中间物理页中的地址,而离散的中间物理页地址可以映射到连续的物理页地址。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

下图显示了ARMv8架构的典型两级地址空间。其中,虚拟地址空间主要代表有:

  • 位于非安全EL0/EL1安全等级中的虚拟机操作系统虚拟内存映射空间;
  • 位于非安全EL2安全等级中的Hypervisor虚拟内存映射空间;
  • 位于EL3安全等级中的安全监视器虚拟内存映射空间。

这些虚拟地址空间都是相互独立的,并且每个内存空间都有独立的配置和页表。图示的两级页表可以比较完整地支持内存虚拟化功能,其中Stage1虚拟机操作系统页表可以将虚拟地址转换为中间物理地址,包括串口设备地址、内存地址和存储设备地址,而Stage2虚拟化页表,结合Hypervisor页表和安全监视器页表,可以将中间物理地址转换为合法的物理地址。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

主流虚拟化技术

为了提升硬件资源使用效率,一台硬件设备会首先被虚拟成多个具备独立功能的虚拟设备,以便同时供多个应用调用,这就涉及到虚拟化技术,这也是云操作系统的关键技术之一。而当前具备这种虚拟化功能的技术维基百科列举的就有超过 60 种,其中有四种虚拟化技术是当前最为成熟而且运用最广泛的,分别是:VMware 的 ESX、微软 Hyper-V、开源的 Xen 和 KVM

虚拟化架构

从虚拟化的实现方式来看,虚拟化架构主要有三种形式:寄居虚拟化架构、裸金属虚拟化架构和操作系统虚拟化架构,其性能及主流产品如下:

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

以虚拟化架构维度,分类如下

【寄居虚拟化架构】Hypervisor 运行在基础操作系统上,构建出一整套虚拟硬件平台,支持创建各种操作系统类型虚拟机。代表性产品:VMware WorkStation、Redhat KVM。优点:简单、易实现。缺点:上层 Guest OS 的处理需要逐层转换,发送到底层进行处理,依赖于 Host OS。 KVM、VMWare workstation 可以都成为寄居式虚拟化,但是两者有本质区别,如下图:

【裸金属虚拟化架构】Hypervisor 直接运行在硬件上,直接与硬件交互提升效率。代表性产品:VMware ESXServer、Citrix XenServer、Microsoft Hyper-V。优点:交互效率提升,不依赖操作系统。

【操作系统虚拟化架构】隔离性差,最后一种不常用,虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例(容器 Container),指向底层托管操作系统。优点:是性能最好,耗费资源最少;缺点:是操作系统唯一,现在最火的 docker 就是属于操作系统虚拟化。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

虚拟化技术

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

虚拟化的特权指令和非特权指令,具体解释如下:

特权指令(Privileged Instructions):特权指令是只有特定特权级别的程序(例如操作系统内核)才能执行的指令。这些指令通常用于执行对底层系统资源和状态的操作,如访问硬件设备、修改内存管理和权限控制等。在x86体系结构中,特权指令运行在ring0。

非特权指令(Non-privileged Instructions):非特权指令是可以由任何权限级别的程序执行的指令。这些指令通常用于一般的应用程序和用户级别代码。非特权指令提供了一组基本的操作和计算功能,但没有直接访问和控制系统底层资源的能力。在x86体系结构中,非特权指令运行在ring3。

【全虚拟化】也称为原始虚拟化技术,运行在虚拟机上的操作系统通过 Hypervisor 来最终分享硬件,所以虚拟机发出的指令需经过 Hypervisor 捕获并处理。

在全虚拟化中,使用Hypervisor作为虚拟机管理器(VMM),统一调度客户操作系统(vm)与底层硬件之间的交互。Hypervisor会捕获并处理与虚拟技术相关的特权指令,使得客户操作系统无需进行修改即可运行。然而,由于额外的处理开销,性能通常低于物理机。常见的产品包含Vmware Workstation、KVM以及Oracle Virtual Box等。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

【半虚拟化】半虚拟化技术是后来才出现的技术,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的 API,这个 API 可以将客户操作系统发出的指令进行最优化,即不需要 Hypervisor 耗费一定的资源进行翻译操作,因此 Hypervisor 的工作负担变得非常的小,因此整体的性能也有很大的提高。

【硬件辅助虚拟化】Hypervisor 可以在部分功能上与硬件直接交互,提升性能。比如在 CPU 性能较差的网络 IO 方面与硬件直接交互。

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

虚拟化架构是关于如何设计和组织虚拟化系统的整体策略,而虚拟化技术是实现这一策略的具体方法和工具。虚拟化架构为虚拟化技术提供了一个蓝图,而虚拟化技术则是实现这个蓝图的手段。两者相辅相成,共同构成了现代虚拟化解决方案的基础。

ESXi 虚拟化技术

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

ESX 是 VMware 的企业级虚拟化产品,ESX 服务器启动时,首先启动 Linux Kernel,通过这个操作系统加载虚拟化组件,最重要的是 ESX 的 Hypervisor 组件,称之为 VMkernel,VMkernel 会从 LinuxKernel 完全接管对硬件的控制权,而该 Linux Kernel 作为 VMkernel 的首个虚拟机,用于承载 ESX 的 serviceConsole,实现本地的一些管理功能。

VMkernel 负责为所承载的虚拟机调度所有的硬件资源,但不同类型的硬件会有些区别。

虚拟机对于 CPU 和内存资源是通过 VMkernel 直接访问,最大程度地减少了开销,CPU 的直接访问得益于 CPU 硬件辅助虚拟化 (Intel VT-x 和 AMD AMD-V,第一代虚拟化技术),内存的直接访问得益于 MMU(内存管理单元) 硬件辅助虚拟化。

虚拟机对于 I/O 设备的访问则有多种方式,以网卡为例,有两种方式可供选择:

一是利用 I/O MMU 硬件辅助虚拟化的 VMDirectPath I/O,使得虚拟机可以直接访问硬件设备,从而减少对 CPU 的开销;

二是利用半虚拟化的设备 VMXNETx,网卡的物理驱动在 VMkernel 中,在虚拟机中装载网卡的虚拟驱动,通过这二者的配对来访问网卡,与仿真式网卡相比有着较高的效率。

半虚拟化设备的安装是由虚拟机中 VMware tool 来实现的,可以在 Windows 虚拟机的右下角找到它。网卡的这两种方式,前者有着显著的先进性,但后者用得更为普遍,因为 VMDirectPath I/O 与 VMware 虚拟化的一些核心功能不兼容,如:热迁移、快照、容错、内存过量使用等。

ESX 的物理驱动是内置在 Hypervisor 中,所有设备驱动均是由 VMware 预植入的。因此,ESX 对硬件有严格的兼容性列表,不在列表中的硬件,ESX 将拒绝在其上面安装。

VMware是全球数据中心解决方案的领导品牌,它为我们提供了高性能、高可用、管理方便的虚拟机管理程序,是目前大多数企业虚拟化环境部署的首选方案。VMware虚拟化的工作原理是,直接在计算机硬件或主机操作系统上插入一个精简的软件层。该软件层包含一个以动态和透明方式分配硬件资源的虚拟化管理程序。

多个操作系统可以同时运行在单台物理机上,彼此之间共享硬件资源。由于是将整台计算机(包括CPU、内存、操作系统和网络设备)封装起来,因此,虚拟机可与所有标准的X86操作系统、应用程序和设备驱动程序完全兼容。可以同时在单台计算机上安全运行多个操作系统和应用程序,每个操作系统和应用程序都可以在需要时访问其所需的资源。VMware虚拟化产品最大的优势在于其完善的虚拟化管理平台以及可靠的基础架构,为企业计算环境提供完善、稳定、可靠的虚拟技术。到目前为止,VMware依然是虚拟化技术行业的领头羊。VMware虚拟化产品的不足主要包括:首先,VMware虚拟化技术主要针对的是X86架构,对于复杂的企业运算环境,VMware无法满足所有计算机主机的需要。其次,VMware在云计算方面的发展略显迟缓,在性能与容灾方面表现不足。最后,VMware是商业产品,用户需要为此支付大量的许可费用。

Hyper-V 虚拟化技术

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

Hyper-V 是微软新一代的服务器虚拟化技术,首个版本于 2008 年 7 月发布,Hyper-V 有两种发布版本:

  • 一是独立版,如 Hyper-V Server 2008,以命令行界面实现操作控制,是一个免费的版本;
  • 二是内嵌版,如 Windows Server 2008,Hyper-V 作为一个可选开启的角色。

对于一台没有开启 Hyper-V 角色的 Windows Server 2008 来说,这个操作系统将直接操作硬件设备,一旦在其中开启了 Hyper-V 角色,系统会要求重新启动服务器。在这次重启动过程中,Hyper-V 的 Hypervisor 接管了硬件设备的控制权,先前的 Windows Server 2008 则成为 Hyper-V 的首个虚拟机,称之为父分区,负责其他虚拟机 (称为子分区) 以及 I/O 设备的管理。Hyper-V 要求 CPU 必须具备硬件辅助虚拟化,但对 MMU 硬件辅助虚拟化则是一个增强选项。

其实 Hypervisor 仅实现了 CPU 的调度和内存的分配,而父分区控制着 I/O 设备,它通过物理驱动直接访问网卡、存储等。子分区要访问 I/O 设备需要通过子分区操作系统内的 VSC(虚拟化服务客户端),对 VSC 的请求由 VMBUS(虚拟机总线)传递到父分区操作系统内的 VSP(虚拟化服务提供者),再由 VSP 重定向到父分区内的物理驱动,每种 I/O 设备均有各自的 VSC 和 VSP 配对,如存储、网络、视频和输入设备等,整个 I/O 设备访问过程对于子分区的操作系统是透明的。

其实在子分区操作系统内,VSC 和 VMBUS 就是作为 I/O 设备的虚拟驱动,它是子分区操作系统首次启动时由 Hyper-V 提供的集成服务包安装,这也算是一种半虚拟化的设备,使得虚拟机与物理 I/O 设备无关。如果子分区的操作系统没有安装 Hyper-V 集成服务包或者不支持 Hyper-V 集成服务包 (对于这种操作系统,微软称之为 Unenlightened OS,如未经认证支持的 Linux 版本和旧的 Windows 版本),则这个子分区只能运行在仿真状态。其实微软所宣称的启蒙式 (Enlightenment) 操作系统,就是支持半虚拟化驱动的操作系统。

Hyper-V 的 Hypervisor 是一个非常精简的软件层,不包含任何物理驱动,物理服务器的设备驱动均是驻留在父分区的 Windows Server 2008 中,驱动程序的安装和加载方式与传统 Windows 系统没有任何区别。因此,只要是 Windows 支持的硬件,也都能被 Hyper-V 所兼容。

Xen 虚拟化技术

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

XEN 最初是剑桥大学 Xensource 的一个开源研究项目,2003 年 9 月发布了首个版本 XEN 1.0,2007 年 Xensource 被 Citrix 公司收购,开源 XEN 转由 www.xen.org 继续推进,该组织成员包括个人和公司 (如 Citrix、Oracle 等)。该组织在 2011 年 3 月发布了版本 XEN 4.1。

相对于 ESX 和 Hyper-V 来说,XEN 支持更广泛的 CPU 架构,前两者只支持 CISC 的 X86/X86_64 CPU 架构,XEN 除此之外还支持 RISC CPU 架构,如 IA64、ARM 等。

XEN 的 Hypervisor 是服务器经过 BIOS 启动之后载入的首个程序,然后启动一个具有特定权限的虚拟机,称之为 Domain 0(简称 Dom 0)。Dom 0 的操作系统可以是 Linux 或 Unix,Domain 0 实现对 Hypervisor 控制和管理功能。在所承载的虚拟机中,Dom 0 是唯一可以直接访问物理硬件 (如存储和网卡) 的虚拟机,它通过本身加载的物理驱动,为其它虚拟机 (Domain U,简称 DomU) 提供访问存储和网卡的桥梁。

XEN 支持两种类型的虚拟机,一类是半虚拟化 (PV,Paravirtualization),另一类是全虚拟化 (XEN 称其为 HVM,Hardware Virtual Machine)。

半虚拟化需要特定内核的操作系统,如基于 Linux paravirt_ops(Linux 内核的一套编译选项) 框架的 Linux 内核,而 Windows 操作系统由于其封闭性则不能被 XEN 的半虚拟化所支持,XEN 的半虚拟化有个特别之处就是不要求 CPU 具备硬件辅助虚拟化,这非常适用于 2007 年之前的旧服务器虚拟化改造。

全虚拟化支持原生的操作系统,特别是针对 Windows 这类操作系统,XEN 的全虚拟化要求 CPU 具备硬件辅助虚拟化,它修改的 Qemu 仿真所有硬件,包括:BIOS、IDE 控制器、 VGA 显示卡、USB 控制器和网卡等。为了提升 I/O 性能,全虚拟化特别针对磁盘和网卡采用半虚拟化设备来代替仿真设备,这些设备驱动称之为 PV on HVM,为了使 PV on HVM 有最佳性能。CPU 应具备 MMU 硬件辅助虚拟化。

XEN 的 Hypervisor 层非常薄,少于 15 万行的代码量,不包含任何物理设备驱动,这一点与 Hyper-V 是非常类似的,物理设备的驱动均是驻留在 Dom 0 中,可以重用现有的 Linux 设备驱动程序。因此,XEN 对硬件兼容性也是非常广泛的,Linux 支持的,它就支持。

KVM 虚拟化技术

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

KVM 的全称是 Kernel-based Virtual Machine,字面意思是基于内核虚拟机。其最初是由 Qumranet 公司开发的一个开源项目,2008 年,Qumranet 被 RedHat 所收购,但 KVM 本身仍是一个开源项目,由 RedHat、IBM 等厂商支持。

与 XEN 类似,KVM 支持广泛的 CPU 架构,除了 X86/X86_64 CPU 架构之外,还将会支持大型机 (S/390)、小型机 (PowerPC、IA64) 及 ARM 等。

KVM 充分利用了 CPU 的硬件辅助虚拟化能力,并重用了 Linux 内核的诸多功能,使得 KVM 本身是非常瘦小的,KVM 的创始者 Avi Kivity 声称 KVM 模块仅有约 10000 行代码,但我们不能认为 KVM 的 Hypervisor 就是这个代码量,因为从严格意义来说,KVM 本身并不是 Hypervisor,它仅是 Linux 内核中的一个可装载模块,其功能是将 Linux 内核转换成一个裸金属的 Hypervisor。

通过 KVM 模块的加载将 Linux 内核转变成 Hypervisor,KVM 在 Linux 内核的用户 (User) 模式和内核 (Kernel) 模式基础上增加了客户 (Guest) 模式。Linux 本身运行于内核模式,主机进程运行于用户模式,虚拟机则运行于客户模式,使得转变后的 Linux 内核可以将主机进程和虚拟机进行统一的管理和调度,这也是 KVM 名称的由来。

相对于Xen而言,KVM从Linux2.6.20后已经集成到内核模块中,使用Linux内核作为虚拟调度器管理虚拟机,更直接的硬件调度代表更高的效率,KVM核心代码也非常短小精湛,未来KVM将逐渐成为主流虚拟化技术。

四种主流技术对比总结

云计算虚拟化技术与应用课后答案,云计算虚拟化技术表现方式

虚拟化技术的发展经历了多个阶段,从早期的软件模拟到虚拟化层翻译和硬件辅助虚拟,其技术的发展为计算资源的管理和利用带来了巨大的变革,提高了资源利用率和灵活性,为云计算和数据中心提供了强大的基础支持。

其中Xen架构在早期作为主流架构服务了众多的用户,但是由于其半虚拟化中操作系统的高度定制化及配置复杂性逐步被其它技术取代;

VMware作为虚拟化领域的领导者,曾覆盖全球大部分市场,近些年由于国际政治因素,逐渐退出中国市场;

Hyper-V因其集成在Windows系统中而被广泛知晓,但是国内使用较少;

KVM基于开源,具有免费和高度可定制的优势,得到了众多开发者和社区的支持,目前已成为国内使用最广泛的虚拟化技术。