虚拟机云服务器是弹性计算家族中最早出现的一款产品,时至今日,市场占有率仍然很高,适用面广、形态灵活、管理方便、技术成熟,是当今云计算的基础。
3.2.1 功能特点
虚拟机云服务器相比传统物理服务器最大的特点,就是用户不必再运维和管理底层的,如服务器、交换机、路由器、BGP、专线、机房、电力、制冷等物理基础设备、设施、环境,而可以将所有精力聚焦在上层的应用环境和虚拟设备的配置、管理和使用上。除此之外,“虚拟化”带来的一系列的新功能,更能给用户带来无与伦比的全新体验。
首先,虚拟机云服务器具备分钟级的交付效率,不仅可以按需交付,而且极大地缩短了应用上线周期,还有多种适合短周期业务和长周期业务的购买方式,兼顾业务灵活性和成本经济性。
第二,虚拟机云服务器的配置规格极其丰富,不仅可以瞬间完成升配或者降配,并且配置的可调整范围大。比如可以从1 个vCPU 的配置,瞬间调整为104 个vCPU ;也可以将普通的云服务器升级为异构计算云服务器,增加一块或多块GPU 计算卡或者FPGA 计算卡;可灵活快速地在线热完成增减磁盘和网卡数量,以及调整带宽这样的操作,实现了极大的成本节约和业务可扩展。
第三,虚拟机云服务器支持热迁移,可以在用户系统几乎无感知的情况下将一台虚拟机从一台物理服务器迁移到另外一台物理服务器。云服务提供商在做硬件升级、软件迭代、硬件故障处理等运维操作时,都可以对虚拟机云服务器进行热迁移,不需要用户停机配合维护。这在传统IDC 的服务器托管模式下是无法实现的。热迁移是虚拟机云服务器的核心优势之一,阿里云也在这方面做了很多的优化,并持续给用户提供更好的热迁移体验。
第四,日新月异的产品服务。我们都记得当苹果公司的第1 款iPhone 手机上市时,人们惊奇地发现原来手机买回来后其功能可以持续扩展;特斯拉公司的Model 系列电动轿车上市后,车辆购买者也首次发现原来可以随着时间推移而不停更新升级一辆轿车的功能。每一次升级都给用户带来了惊喜。云计算相对于传统IT 基础设施的一个巨大提升就是它的可扩展性和新功能的持续迭代,用户使用云服务器后可轻松地融合集成弹性块存储、RDS、EMR、E-HPC 等基础和PaaS 类产品,来持续地
统和数据能力。另外,用户今天看到的可用服务与12 个月之前看到的迥异。即便是云服务器这一服务本身的新功能发布也在以天为单位持续进行着。以阿里云为例,每天研发团队都会发布新版本来持续增强产品的功能、易用性、健壮性。而这在传统的IT 基础设施用户眼里是不可思议的,传统的一次性购买交付后的系统,每一次更新的复杂度和挑战都极其巨大,并且伴随着不菲的费用。
第五,全 API 管理。通过 Open API 可以完全操控云服务器,包括开机、关机、设备热插拔、资源配置属性修改等。对于有开发能力的用户来说,重新定义一套适合自身业务的更高效的管理控制台是十分容易的;对于DevOps 用户来说,全链路地融合企业内部的产品开发、测试、发布流程,云计算资源的创建使用也十分方便。企业效率的提升就是竞争力的提升。
最后,稳定“质”的飞跃。鉴于虚拟云服务器的产品服务交付特性,其底层资源的大规模运维交给了云服务厂商,云服务厂商和用户之间以SLA 的方式保障服务稳定性。以阿里云为例,单ECS 实例的服务可用性保障已经提升到99.975%,以单地域多可用区部署的ECS 实例的服务可用性保障更是高达99.995%。这种稳定性的保障能力相比传统IT 的资源部署使用方式,是另外一个巨大的提升。
3.2.2 适用场景
虚拟机云服务器是一款普适产品,能做绝大多数x86 物理服务器能做的事情。正如物理服务器针对不同的需求会有不同的配置,虚拟机也为不同的主流场景提供了各类专门优化的实例规格族,这些场景包括:
通用计算场景:面向日常的需求,例如应用服务器、中小型数据库、Web 服务器、开发环境等;
计算密集场景:科学计算、高性能前端机、对战类游戏、机器学习、视频编解码等;
内存“饥渴”场景:缓存、内存数据库、SAP HANA 等;
高I/O 场景:关系型数据库、NoSQL 数据库、数据仓库等;
大数据分析场景:MapReduce 分布式计算如Hadoop、Spark 等,还有分布式文件系统、日志和数据处理等。
阿里云的虚拟机云服务器既可以作为 Web 服务器或者应用服务器单独使用,又可以与其他服务器一起工作,提供更丰富的解决方案,举例如下。
企业官网或轻量的 Web 应用
当网站初始阶段访问量小时,一台低配置的入门级ECS T 规格族虚拟机即可运行 Apache 或 Nginx 等 Web 应用程序、数据库,以及存储文件。
访问量波动剧烈的应用或网站
某些应用(如抢红包应用、优惠券发放应用)、电商网站和票务网站等的访问量可能会在短时间内产生巨大的波动。在这些场景中,独享型的C 规格族或者G 规格族虚拟机,配合负载均衡 SLB 和弹性伸缩,可自动化实现在访问量高峰来临前增加 ECS 实例,在进入访问量低谷时减少 ECS 实例,满足了访问量达到峰值时对资源的需求,同时能降低成本,并提升应用的可用性。
多媒体应用或网站
搭配使用独享型的虚拟机与对象存储 OSS,OSS 承载静态图片、视频或者下载包,进而降低存储费用,同时配合内容分发网络 CDN 和负载均衡 SLB,可大幅减少用户访问等待时间、降低网络带宽费用和提高可用性。
高并发游戏服务器
很多华丽精彩的大型在线游戏需要在服务端进行大量密集的计算,此时可以使用高主频型的HFC 或HFG 规格族虚拟机。它们配备了高主频的CPU,能为游戏引擎提供强大的计算力。
高 I/O 要求数据库
为支持承载高 I/O 要求数据库,如 OLTP 类型数据库和 NoSQL 类型数据库,可以使用较高配置的G 规格族或者R 规格族虚拟机,并配合高性能的 ESSD 云盘,或者使用带本地SSD 盘的I 规格族虚拟机,实现高 I/O 并发响应。云盘有更好的可靠性和灵活性,本地盘则有更低的时延,两个方案各有优劣。
大数据实时在线或离线分析
对于 Hadoop 分布式计算、日志处理和大型数据仓库等业务场景,可以使用大数据D 规格族虚拟机。它采用了本地HDD 硬盘,可以提供海量的存储空间和优异的存储性能。
3.2.3 虚拟化技术
虚拟机是公共云服务提供商的核心产品形态,故虚拟化技术也是弹性计算技术中的核心技术之一。虚拟化技术涉及计算虚拟化、存储虚拟化、网络虚拟化、管控调度等方面,本节主要介绍其中的计算虚拟化技术,以阿里云的虚拟化技术发展历程作
开篇概述,再介绍业界流行的KVM 虚拟化技术,最后概括介绍云计算中虚拟化的热迁移和热升级这两大关键技术。
虚拟化技术的发展历程
虚拟化技术是云计算的重要技术之一,在被云计算采用之后就不断演进发展。虚拟化技术在阿里云的历史正好是这个演进发展过程的一个缩影,所以下面就以阿里云为例先来讲述一下阿里云虚拟化技术发展历程,如图 3-1 所示,然后重点介绍后期的KVM 和软硬一体的虚拟化技术。
存储Domain 0 Xen I/O{DMA中断} VM2 VM1 硬件管控网络2009—2015年存储管控网络硬件2015—2018年VM2 VM1 I/O{DMA 中断} VM2 VM1 存储管控网络2018年至今MOC卡HA KVM 1 KVM 2 HA KVM 1 KVM 2 硬件 I/O{DMA 中断}
图 3-1 阿里云虚拟化技术发展历程
1)Xen 虚拟化架构(2009—2015 年)
2009 年,在阿里云刚成立之时,在开源虚拟化技术领域中,Xen 已经是比较成熟的虚拟机监控器项目,所以阿里云采用开源的 Xen 作为第一个虚拟化底层架构。当时,阿里云将 Xen 开源项目应用在公共云上,做了一些修改,解决了 Xen 在公共云应用中的大规模工程化方面的各种细节问题。在这个时期,亚马逊 AWS 的虚拟化架构使用的也是 Xen,这种选择也是当时业界的共识。
2)KVM 虚拟化架构(2015—2018 年)
2005 年、2006 年,Intel 和 AMD 的 x86 CPU 硬件分别开始支持硬件虚拟化 (VT)技术,并在 2006 年诞生了 KVM 这个基于硬件虚拟化的开源虚拟化项目。红帽(RedHat)公司在 2008 年收购了开发 KVM 的以色列公司 Qumranet 后,KVM 更是得到了大力的发展。2014 年左右,KVM 在功能完备性、稳定性、 社区支持等各个方面都超过了 Xen,这时阿里云也开始研发基于 KVM 的云服务器,最终在 2015 年将虚拟化架构迁移到了 KVM 上。在 2015—2018 年,阿里云不仅使用 KVM 解决了工程化58 的问题,也做了 QEMU/KVM 的热升级等原创工作,自研了 vCPU 的调度器,支持性能突发型实例规格(T5)的产品,同时对热迁移等重要功能做了比较好的优化。
3)软硬件结合的虚拟化架构(2018 年至今)
在 KVM 虚拟化技术比较成熟的情况下,在下一代的虚拟化架构演进方向上,包 括亚马逊 AWS、阿里云等云服务提供商仿佛达成默契,都在软硬件结合的方向上投入研发。AWS 在 2017 年年底对外发布了基于 Nitro 架构的 C5 实例规格,阿里云在 2017 年也发布了基于神龙架构的弹性裸金属服务器,并在 2018 年上线了基于神龙架构的虚拟机云服务器。神龙架构是阿里云自研的软硬件结合的虚拟化平台,其中的 MOC 卡是神龙架构中的核心硬件,将存储、网络、管控的链路全部转移到 MOC 上, 同时对 KVM 虚拟化技术做进一步优化,以提升计算性能。
近些年,随着云计算规模体量的增大、研发人力物力的大量投入,虚拟化架构的演进速度进一步加快。另外,软硬件结合的神龙架构也在持续迭代,神龙 1.0、2.0、3.0 等架构的升级一直都在持续进行中。
KVM 虚拟化技术
KVM 是基于 CPU 硬件虚拟化技术(如 Intel 的 VT-x、AMD 的 AMD-V 等)的 全虚拟化技术,是业界多数公共云和专有云服务提供商使用最多的虚拟化技术之一。
KVM 虚拟化技术的核心主要由两个模块组成。
1)KVM 内核模块
它属于标准 Linux 内核的一部分,是一个专门提供虚拟化功能的模块,主要负责 CPU 和内存的虚拟化,包括客户机的创建、虚拟内存的分配、 CPU 执行模式的切换、vCPU 寄存器的访问和vCPU 的执行。
2)QEMU 用户态工具
它是一个普通的 Linux 进程,为客户机提供设备模拟的功能,包括模拟 BIOS、PCI/PCIe 总线、磁盘、网卡、显卡、声卡、键盘和鼠标等,同时它通过 ioctl 系统调用与内核态的 KVM 模块进行交互。
KVM 是在硬件虚拟化支持下的完全虚拟化技术,因此它可以支持在相应硬件上能够运行的几乎所有的操作系统,如 Linux、Windows、FreeBSD、macOS 等。QEMU/KVM 虚拟化基础架构如图 3-2 所示。在 KVM 虚拟化架构下,每个虚拟机就是一个QEMU 进程,即在一个宿主机上有几个虚拟机就会有几个 QEMU 进程 ;客户机中的每一个虚拟 CPU 对应 QEMU 进程中的一个执行线程 ;一个宿主机中只有一个 KVM 内核模块(当然也可以使用多个 KVM 模块以提高可用性),所有客户机都与这第3 章 计算产品和技术59 个内核模块进行交互。3.3 节还会继续介绍软硬件一体化设计的虚拟化技术。
用户态普通进程1 用户态普通进程2 Linux 虚拟机系统QEMU进程1 带有硬件虚拟化特性(Intel VT/AMD-V)的硬件KVM内核模块Linux内核Linux 虚拟机系统QEMU进程2 ......
图 3-2 QEMU/KVM 虚拟化基础架构
热迁移技术
在虚拟化环境中的虚拟机迁移分为冷迁移和热迁移,也称为离线迁移和在线迁移。冷迁移和热迁移最大的区别就是,在冷迁移中明显有一段时间(可能是几秒钟或者几分钟),虚拟机中的服务不可用,而热迁移则没有明显的服务暂停时间。虚拟化环境中的冷迁移也可以分为两种。
关闭虚拟机后,将其硬盘镜像复制到另一台宿主机上,然后启动, 这种迁移不能保留虚拟机中工作负载的运行时状态。
两台宿主机共享存储系统,只需要在暂停(而不是完全关闭)虚拟机后,复 制其内存镜像到另一台宿主机中后启动,这种迁移可以保持虚拟机迁移前的内存状态和系统运行的工作负载。
热迁移(Live Migration)指在保证虚拟机上的应用服务正常运行的同时,让虚拟机在不同的宿主机之间迁移。其逻辑步骤与前面的冷迁移几乎一致,有磁盘和内存都复制的热迁移,也有仅复制内存镜像的热迁移;不同于冷迁移的是,为了保证迁移过程中虚拟机服务的可用性,热迁移过程仅有非常短暂的停机时间,以至于虚拟机中的应用程序几乎没有任何感知。 KVM 下的热迁移如图 3-3 所示。60
VM1QEMU/KVM虚拟机支持虚拟化技术的硬件KVM宿主机1(源主机) VM2 VM2 QEMU/KVM虚拟机支持虚拟化技术的硬件KVM宿主机2(目的主机) 热迁移
图 3-3 KVM 下的热迁移
虚拟机热迁移增强的是系统的可维护性,其主要目标是在用户没有感知的情况下,将虚拟机迁移到另一台物理机上,并保证其各个服务都能正常使用。主要从以下两个方面来衡量虚拟机迁移的效率。
1)整体迁移时间
整体迁移时间指从源主机(Source Host)迁移操作开始,到虚拟机被迁移到目的主机(Destination Host),并恢复其服务所花费的时间。
2)服务暂停时间(Service Down-Time)
服务暂停时间指在迁移过程中,源主机和目的主机上虚拟机的服务都处于不可用状态的时间。此时,源主机上的虚拟机已暂停服务,目的主机上的虚拟机还未恢复服务。
由于服务暂停时间是用户可以真切感受得到的,所以它也更为重要。热迁移的服务暂停时间,受虚拟机的工作负载(如 CPU、内存、网络、磁盘等压力)、宿主机计算性能和网络带宽等因素的影响,一般在几毫秒到几秒不等。
在阿里云这样的大型公共云上,热迁移具有广泛的用途,比如硬件升级与维护、 宿主机内核升级、动态调度资源等。目前热迁移也是阿里云 ECS 的核心竞争力之一。在阿里云真实场景下热迁移的链路是比较长的,需要管控系统、虚拟化、存储、网络的各个组件相互配合才能实现,公共云上的热迁移过程如图 3-4 所示。KVM 热迁移的关键步骤如图 3-5 所示。第3 章 计算产品和技术61
下发迁移任务执行迁移迁移准备GW拷贝Session终拷贝Session初拷贝 源端存储PAUSE 网络路由表重建 Relay路由建立 VM网络倒换 目的只读打开 目的存储读写管控配置下发源端VM翻译上报迁移准备VM NC切换VM启动迁移设备映射终拷贝VM暂停虚拟化层面 控制层面 存储、网络组件
图 3-4 公共云上的热迁移
初始化内存初拷贝后拷贝VM状态保存资源释放存储切换网络切换资源预留内存初拷贝后拷贝VM状态保存VM启动源主机目的主机存储切换网络切换VM目的主机运行 VM网络 中断VM暂停 VM运行在源主机
图 3-5 KVM 热迁移的关键步骤
为了进一步缩短服务停机时间,提升热迁移的用户体验,阿里云 ECS 进行了如下 3 个方面的热迁移优化,如图 3-6 所示。
1)对关键步骤进行最大限度的并行。
2)将非关键的操作预处理或延后处理,使其不阻碍热迁移的关键步骤。
3)将核心控制权下移到虚拟化层处理。由于热迁移中的服务停机时间与虚拟机的负载相关度很高,为了进一步优化阿里云 ECS 的热迁移体验,将人工智能技术引入热迁移流程中,用于预测虚拟机的负载趋势和最佳迁移时间点,尽可能地让热迁移62
发生在虚拟机负载较低的时刻,这样对用户的业务影响最小。
BDRV flush 关键路径会话拷贝存储/网络 非关键操作前置存储/网络 非关键操作后置网络会话终拷贝耗时操作拆解/接口优化增加Pre Last Copy阶段存储I/O关闭模式切换中继转发VM 终拷贝脏页压缩
图 3-6 阿里云 ECS 的热迁移优化
这些优化的最终落地,使得阿里云 ECS 热迁移的用户体验大幅提升,目前多数小规格虚拟机的服务停机时间在 100 毫秒以内,而稍大规格虚拟机的热迁移服务停机时间一般都能控制在几百毫秒内。
热升级技术
云计算中的热升级技术指在客户业务基本无感知的情况下,对云计算基础设施的组件进行升级操作。在阿里云弹性计算服务的技术框架中,我们设计了一套针对QEMU/KVM 等核心虚拟化组件的热升级系统,并在生产环境的成千上万的虚拟机上进行了广泛应用。
在弹性计算服务中,我们持续为客户增加新的功能,经常要修改QEMU/KVM 等虚拟化监控器软件。由于虚拟机软件都会有一些缺陷,而且部分缺陷还会导致安全第3 章 计算产品和技术63
方面的风险,所以需要对运行中的虚拟机及虚拟化软件进行升级。因为对这些升级的请求比较频繁,而且针对的是云上数以百万计的虚拟机,所以必须尽可能地缩短客户虚拟机的服务中断时间。在已经存在的传统技术中,内核热补丁技术和上一节介绍的虚拟机热迁移技术能满足这样的需求。不过,在实际的大规模应用中,它们都有一些弊端,因此我们针对这样的升级需求开发了阿里云独特的虚拟化热升级技术。表3-1 对这三种热升级技术进行了比较。
表3-1 三种热升级技术比较
升级技术 |
应用场景 |
优 势 |
劣 势 |
内核热补丁 |
简单的内核安全补丁修复 |
几乎无服务中断时间 |
不能处理复杂的修复 维护成本高 只能修复Linux 内核(包括KVM 模块) |
虚拟机热迁移 |
整个系统全新升级 |
升级服务器上的所有软件 |
可扩展性较弱,需要额外服务器 迁移过程需要消耗较大的网络带宽 迁移过程中虚拟机的服务性能下降,有相对较长的服务中断时间 不支持直通设备的热迁移 |
阿里云虚拟化热升级 |
云上的新功能上线 虚拟化组件上的较复杂的修复 |
很短的服务中断时间 可扩展,无额外网络流量 支持直通设备 |
只能修复虚拟化组件( 包括QEMU/ KVM 等,能满足云业务的需求) |
1)内核热补丁
内核热补丁技术能够在不重启系统的情况下对内核打补丁,修复问题。它让运行中的系统基本感受不到服务中断。但是它不能修复较为复杂的问题,比如对持久性数据结构的改动或者添加新功能;同时它只能针对内核模块进行升级。这种技术主要适用于修复较为简单的Linux 内核(包括KVM 模块)的安全问题。
2)虚拟机热迁移
热迁移技术是云服务提供商中经常用于软件升级的技术,阿里云也将热迁移技术大量用于物理硬件维修、虚拟机库存动态调度等场景。热迁移需要复制源主机上虚拟机的状态(如内存)到另外一个空闲备用的目的主机上,在最后一轮状态传输时,停止正在运行的虚拟机,复制最后一次改变的状态,最后在目的宿主机上启动虚拟机, 恢复运行状态。
通过热迁移技术,云服务提供商可以升级服务器上所有软件,如宿主机内核、虚64
拟化软件、损坏的硬件设备等。不过,在大规模的云计算数据中心中,热迁移也受到一些限制,比如它需要额外的空闲服务器才能迁移;在迁移过程中需要较大的网络带宽,如果大量虚拟机同时做热迁移可能造成一些网络拥塞;热迁移的内存迭代拷贝需要消耗一些CPU 计算资源,并且最后会停止虚拟机,这个过程对虚拟机运行的性能有损坏并会产生一小段的服务中断时间;云上有不少GPU/FPGA 等设备直通的虚拟机,目前还不能支持带直通设备的热迁移。
3)阿里云的虚拟化热升级
阿里云的虚拟化热升级技术尽可能吸取上述两种方法的优点,改进它们的不足。阿里云的虚拟化热升级技术支持整个虚拟化软件栈(主要是用户态的QEMU 和内核态的KVM 模块)的热升级,能实现云计算环境下较为复杂的新功能的热升级,比如热升级支持一种新的分布式存储系统。它避免了热迁移的劣势,不需要额外的服务器和网络带宽,同时虚拟机上感知到的服务中断时间比热迁移短得多。尽管它没有像热迁移那样实现全新的主机切换,但是在云环境下一般来说也是够用的。以KVM 虚拟化为例,主机的内核是相对独立的,用户虚拟机的新功能开发一般只要改动QEMU/ KVM 即可实现(对KVM 在2018 年公布的90 多个缺陷进行统计,其中98% 的缺陷发生在QEMU/KVM 上,通过热升级都可以解决)。
阿里云虚拟化热升级技术里面有三个关键的技术点:双KVM 内核模块、虚拟机嫁接、直通设备移交。下面分别对其做简单的介绍。
(1)双KVM 内核模块
以Intel 硬件平台下的KVM 为例, 普通的KVM 架构有一个与架构无关的 kvm.ko 模块,还有一个管理Intel 硬件虚拟化的kvm-intel.ko 模块。在热升级框架下, 我们做了kvm-intel-0.ko 和kvm-Intel-1.ko 两个模块,以便实现KVM 模块的热升级, 如图3-7 所示。我们尽可能地将kvm.ko 模块中多数的功能都移到kvm-intel-0.ko 模块中,让kvm.ko 模块尽可能“薄”。在一般情况下,它不需要热升级,只需要升级架构相关的kvm-intel.ko 模块即可。当我们加载kvm-intel-0.ko、kvm-intel-1.ko 模块时,会创建相应的/dev/kvm0、/dev/kvm1 等设备节点文件,用于QEMU 与KVM 内核模块的交互。
(2)虚拟机嫁接
在KVM 上,一个QEMU 进程代表一个虚拟机。虚拟机包括内存、虚拟CPU、存储、网卡等,都是由QEMU 进程来分配和管理的。将一个虚拟机从前面提到的kvm0 迁移到kvm1 上,本来可以使用本地热迁移技术,不过这样就需要两份相同大小的虚拟机内存,对于内存数量很大的虚拟机而言,会浪费不少内存资源。在阿里云第3 章 计算产品和技术65
虚拟化热升级技术中,通过“虚拟机嫁接”将虚拟机的内存和内部状态从一个KVM 实例嫁接到另一个KVM 实例之上,如图3-8 所示。我们先将虚拟机的内存标为reserved 状态,然后派生一个新的QEMU 子进程,调用QEMU 中的savevm_state 函数保存原来虚拟机的内部状态并暂停虚拟机运行,之后在新的QEMU 子进程中调用execve() 函数加载升级后的QEMU 程序文件,并通过loadvm_state 函数恢复虚拟机的状态。在这个过程中,但凡有任何的失败,系统都会让最初暂停的QEMU 进程重新恢复原来的状态。在具体实现中,需要让新的QEMU 进程在execve() 函数执行后, 能够保留原虚拟机的内存。由于在默认情况下execve() 函数并不支持内存的保留, 所以我们在宿主机的Linux 内核中对mmap 函数进行了简单的改造,添加了MAP_ KVM_RESERVED 这样一个专用于QEMU/KVM 热升级的标志。
用户态内核态VM kvm-intel.ko模块支持Intel VT-x的硬件可替换的部分不可替换的部分支持Intel.VT-x的硬件kvm.ko模块/dev/kvm /dev/kvm0 /dev/kvm1 很“薄”的kvm.ko模块VM1 VM2 kvm-intel-0.ko模块kvm-intel-1.ko模块
图3-7 双KVM 内核模块
(3)直通设备移交
大型的云服务提供商有不少的计算服务通过将GPU 或FPGA 设备直通给虚拟机,来加速用户的诸如深度学习、人工智能相关的应用程序。使用Intel VT-d 技术实现设备直通,可让虚拟机直接访问硬件设备。现代设备的访问都是由DMA(直接内存访问)来完成的,在虚拟化直通设备的情况下,DMA 访问所需的从GPA(虚拟机物理地址)到HPA(物理机物理地址)的转化,是由IOMMU 来实现的。如果实现带有直通设备的虚拟机的热升级,那么需要迁移设备的内部状态,重建IOMMU 重映射表,保存和恢复正在进行的DMA 操作以免造成数据丢失。这是比较复杂的情况, 而且没有现成框架可以使用。66
图3-8 虚拟机嫁接
在阿里云虚拟化热升级技术中,我们使用了“直通设备移交”的方式来实现直通设备的热升级。由于我们都是使用VFIO 这个框架来实现设备直通的,VFIO 会在/ dev/vfio/ 目录下暴露一些设备节点给QEMU 使用。在热升级框架中,引入了一个用户态的VFIO 连接器,它将所有与VFIO 相关的文件描述符和接口(包括/dev/vfio、/ dev/vfio/grp*、 VFIO eventfd 和KVM irqfd 等),以及QEMU 对VFIO 文件描述符的访问包装起来,如图3-9 所示。在热升级的过程中,只需要将VFIO 连接器的控制权移交给升级后的QEMU 进程即可,避免了设备状态的保存和IOMMU 重映射表的重建等非常复杂的操作。在热升级框架的设计中,我们通过在设备移交后立刻给虚拟机注入一个虚拟中断的方式,解决了中断丢失的问题。
在一些典型的测试案例( 如空载、Web 服务器、MySQL 数据库服务器、SPECCPU 压测等)中,阿里云虚拟机热升级带来的业务中断时间为30 毫秒左右。该热升级框架在线上大规模虚拟机的功能迭代、运维升级中发挥了巨大的作用,已经成第3 章 计算产品和技术67
为阿里云弹性计算升级迭代的运维利器,也是阿里云虚拟化的核心技术之一。
图3-9 直通设备移交