1.走进边缘云: 边缘计算背后的性能需求
1.1火山引擎边缘计算节点
随着人工智能、自动驾驶、云游戏、直播音视频等应用场景的大规模落地,这些应用对数据处理的时效性、安全性提出了更高要求,集中式云计算模式难以完全满足其在网络时延、带宽成本、数据安全等方面的需求,伴随用户对云计算服务能力的多元化需求,边缘计算应运而生。边缘计算基于靠近应用和数据源头的网络边缘位置,就近提供计算、网络、存储、安全、智能等服务,据IDC报告显示,到2024年底,全球在边缘计算上的支出预计将达到2320亿美元。同时,Gartner报告显示,到2025年底,全球75%的企业生成数据将会在边缘产生和处理。
边缘计算节点是火山引擎边缘云提供的通用化边缘计算服务,其基于覆盖中国各省份和运营商的边缘节点,在核心底座边缘云原生操作系统之上,提供弹性、可靠、分布式的算力资源和低时延的网络资源,帮助用户将业务快速部署到网络边缘,提升响应速度、降低带宽成本,为用户提供稳定、高效、丰富的一站式算力服务。结合基础设施、通用化计算服务、场景化计算服务、网络服务和对应解决方案,共同构成了边缘场景下的完整分布式云计算解决方案。
边缘计算节点提供如下两种计算形态:
- 边缘虚拟机: 提供弹性、稳定、高性能、安全的虚拟机实例服务,支持x86/ARM/GPU等多样化计算资源
- 边缘裸金属:基于边缘基础设施,提供高性能、快速交付、便捷运维的裸金属服务器
本文主要围绕边缘虚拟机实例性能优化,深入探讨边缘高性能虚拟机的需求背景、实现原理及背后的核心价值。
1.2边缘场景的性能需求
边缘计算节点目标为客户提供高性价比边缘算力,部分客户场景对单位成本下的业务性能及性能稳定性敏感,以下是两个案例。
1.2.1直播客户案例
随着移动端直播和直播电商的兴起,直播行业已经成为数字经济的重要组成部分。从技术维度看,直播业务对即时性和互动性要求较高,通过利用边缘低延时算力和网络、低成本带宽,可以显著提升直播业务品质,降低运营成本。其与边缘结合的概要架构如下图所示,主播推流到边缘节点、观众从其就近的边缘节点拉流。在实际直播客户接入过程中,单位算力所能处理的流量带宽直接关联该类客户业务成本, 部分上云客户也对虚拟机和裸金属性能和成本差异敏感,因此如何能够让客户既使用到虚拟机实例的丰富特性,又提供较好的业务性能就是一个重要的议题。
1.2.2加速客户案例
基于覆盖全球的加速节点和网络基础设施,实现游戏/应用加速是边缘计算的另一个重要场景,该类客户对延时和网络抖动敏感,下图是一个使用边缘云全球加速和边缘虚拟机产品实现跨域加速的案例。用户就近接入全球加速网络,通过分布在边缘机房的虚拟机实例部署业务服务,并最终通过公网和跨域专线与目标服务通信。该部分客户对网络抖动有较低容忍度,经过深入分析,中断/进程抢占、大量VM Exit 均会造成客户业务抖动,如何能够尽量降低虚拟化层对业务的干扰就成了保障加速类客服服务质量的关键。
2.极致优化:高性能虚拟机如何实现“零”损耗
上述业务需求驱动我们思考如何能够降低虚拟化层对性能的扰动,提高业务场景的虚拟机单位性能。边缘高性能虚拟机项目于是诞生,其详细介绍如下:
2.1整体架构
边缘计算通过虚拟化技术向用户提供云计算基础服务,底层基座依托于Qemu+KVM来实现虚拟化(资源,安全等)隔离。Qemu+KVM的虚拟化方案虽然会尽可能的利用硬件能力来降低虚拟化开销,但是像CPU核间中断(IPI),Timer中断,虚拟设备中断等仍存在大量虚拟化开销,同时虚拟化硬件加速能力(如Posted Interrupt等)设计的复杂性也会带来额外硬件开销。我们通过修改Host Kernel,KVM模块等方式,为云计算提供了一种新的硬件完全直通,性能损耗极低的高性能虚机方案。
该方案的设计理念是打破虚拟化的“边界”,让Guest Kernel像Host Kernel一样运行在物理机上。为了让CPU/Memory/设备等硬件的资源需要直接assign给Guest,每个高性能虚拟机的vCPU需要独占一个物理CPU,内存,中断等资源。
边缘高性能虚拟机的设计目标:
- VM Exit数量降至最低,对标裸金属
- Guest镜像无感,无须修改Guest镜像
- 支持热升级,热迁移等云上基础能力
- 支持和通用VM实例混部的能力
其整体架构设计如下:
2.2关键技术
Intel 的 VT-x 技术是在 2005 年首次发布的。VT-x 技术是 Intel 虚拟化技术的一部分,旨在提高虚拟化性能并增强虚拟化软件的功能。Intel VT-x 引入了 Root 模式和 Non-Root 模式:Root 模式是虚拟机监视器(VMM)运行的特权模式,也称为 Hypervisor 模式;Non-Root 模式是客户操作系统或虚拟机运行的模式。借助VMLAUNCH/VMRESUME指令,VMM将控制权转移给虚拟机,当虚拟机在运行过程中需要执行特权指令或访问受保护资源时,会产生VM Exit将控制权转移给VMM,由VMM协助模拟处理。
- Guest中断不退出机制
中断虚拟化对虚拟化的影响是非常大的,早期虚拟化的实现中,向Guest注入中断前一般要先将vCPU从Non-Root模式kick出来,然后由VMM模拟中断控制器,完成中断的注入。尽管后来CPU厂商为虚拟化引入了apicv等硬件加速技术,减少了Guest访问LAPIC寄存器引入的虚拟化损耗,但仍需要VMM协助完成中断的注入。再后来,Posted-Interrupt技术以及VT-d技术进一步缓解了这个问题,但是在解决中断注入问题的同时,硬件层面也引入了不小的性能开销,我们测试对比发现,相比裸金属物理设备直接产生中断,通过Posted-Interrupt方式注入中断的延迟要高出很多。
在高性能虚拟机的设计框架下,除了虚拟设备这些必须要要模拟注入的中断,直通设备,LAPIC Timer等设备产生的中断能直接投递给Guest,就像他们在物理环境中直接投递给物理CPU一样。通过配置VMCS中的INTR_EXITING字段,可以控制外部中断发生时Guest不退出,以此为基础,我们实现了一个外部中断不会导致Guest退出的基础框架,后续所有的中断都将尽可能的直接投递给Guest,而不是产生external interrupt VM Exit后再由VMM模拟注入。
但是,真实世界中,物理CPU上产生的中断并不是全部都是属于Guest的,比如host kernel IPI中断,host设备中断如NVMe SSD等。对于设备中断,可以通过修改host kernel实现设备中断隔离技术,将所有的设备的中断affinity调整隔离到指定的控制面CPU上;对于系统中断如IPI,这类中断必须由本地CPU处理,可以通过send IPI as NMI技术,将IPI中断类型修改为NMI type,从而强行将vCPU kick出来后在Host kernel处理这些系统中断。至此,我们为运行高性能虚拟机的物理CPU隔离出一个“干净的”vCPU运行环境。在这个环境下,“几乎”所有的Host中断都不会投递到该CPU上,一旦收到中断,一定是Guest中断,中断会直接投递到Guest或者通过VMM记录pending Guest interrupt并在下次Guest enter时注入。
- Timer中断直通技术
虚拟化场景下,Guest Timer是由VMM负责模拟的。以x86 CPU虚拟化为例,KVM为每个vCPU模拟一个LAPIC Timer,LAPIC Timer虚拟化的开销当前是很大的,以常见的Intel TSC Deadline Mode为例,Guest编程TSC Deadline MSR时会产生一次VM Exit,Timer到期fire时又会因为external interrupt产生一次VM Exit。Intel在最新一代CPU上引入了apic Timer硬件加速来降低这些开销,但一是这些新的CPU还没有大规模商业化,真正的性能收益未知,二是与posted-Interrupt类似,这类硬件加速技术一般会引入一定的硬件性能损耗。
在高性能虚拟机技术方案中,由于host控制面CPU要处理的工作不繁重,我们强制host CPU使用早期的Broadcast Timer,然后将每个CPU的LAPIC Timer完全直通给Guest使用。对于直通给Guest的LAPIC Timer,通过配置Guest修改TSC Deadline MSR不退出,再借助前面介绍的Guest中断直接投递机制,实现Guest LAPIC Timer没有任何VM Exit。
- 绕过Posted-Interrupt机制的VFIO中断直通技术
在传统的虚拟化场景中,对于直通设备的中断注入是基于Posted-interrupt机制(Intel)来完成的,Posted-Interrupt机制会带来额外的硬件开销。借助VFIO框架,直通设备产生中断时,首先被IOMMU拦截,然后通过查找IOMMU中的IRTE表项,找到要投递给Guest的目的vCPU和中断vector,最终通过IOMMU的Interrupt remapping或者Posted-Interrupt机制完成中断的注入。
高性能虚拟机通过巧妙地修改硬件IOMMU IRTE表项,使其直接记录要投递给Guest的destination vCPU和vector,从而实现了直通设备的中断直接投递到Guest内部的效果。
- IPI extreme fastpath
虚拟化场景下,Guest内部发送IPI会写LAPIC ICR寄存器,该操作会产生VM Exit,最终由VMM负责模拟,并注入IPI中断给目的vCPU。
出于安全性考虑,高性能虚拟机没有将ICR直通给虚机,因此Guest IPI仍需要VMM协助模拟。在社区IPI fastpath的基础上进一步优化,使用汇编重写简化了VMM模拟IPI的逻辑,并在VMM侧写ICR产生IPI中断直接投递到Guest,最大限度的降低write ICR exiting模拟带来的性能开销。
- 内核资源动态隔离技术
为了让高性能虚拟机最大限度的独占物理核,我们构建了一套完整的的内核资源隔离技术,达到将timer中断,外部设备中断,host进程等干扰要素隔离的效果。
- 对于host timer中断,内核提供了NOHZ_full 技术,NOHZ_full 通过减少定时器中断的频率来优化系统性能。但是该技术是静态配置技术,需要在内核cmdline中提前配置。高性能虚拟机方案借助NOHZ_full基础框架,实现了dynamic nohz_full技术,能够实现vCPU enter Guest时,动态的进入nohz_full状态,并在vCPU exit Guest时,动态退出nohz_full状态,最大程度减少host Timer中断对Guest运行时的影响;
- 类比内核已有的isolCPUs中断隔离技术,对于分配给高性能虚拟机的host CPU核,创建虚机前,将所有的host中断迁移到控制面CPU上,并确保新创建的中断也不会迁移到这些CPU上;
- 类比内核已有的isolCPUs进程隔离技术,对于分配给高性能虚拟机的host CPU核,创建虚机前,将所有host进程迁移到控制面CPU上,并确保创建虚机后,vCPU线程不会被随便迁移走。
2.3场景测试
- Micro Benchmark(单位ns,less is better),在Guest内执行IPI Benchmark等测试工具,测量IPI单播延迟,IPI 多播延迟,单次Timer中断延迟,单次核心MSR寄存器访问延迟,可发现核心中断延迟和 MSR 写入延时大幅降低。
- VM Exit数量统计
通用实例和高性能实例均配置了idle=poll
,通过在Guest内redis-benchmark等本地压测工具,在Host侧统计压测过程中的VM Exit数量,可以看到,在这两个测试 Case 下高性能实例减少了超过 99% 的 VM Exit。
通用实例 VM Exit主要集中在三类:
- MSR_WRITE
- External interrupt
- Preemption_Timer
- 云服务器基准场景性能测试对比,性能提升从 6% ~16% 不等。测试工具使用社区成熟的压测工具如wrk、ab、redis-benchmark、netperf等进行压测,网络拓扑为一台虚拟机与一台物理机互相压测。
3.业务赋能: 边缘场景应用性能大幅提升
边缘高性能虚拟机当前已在线上逐步应用,在多个边缘应用场景均有明显收益,以下就实际业务场景举例说明。
3.1CDN场景
内容分发网络(Content Delivery Network)是一种通过部署在全球各地的服务器网络,将内容(如文本、图像、视频等)快速传输到用户的网络的技术系统。CDN 可以减轻源服务器压力、提高网站性能、加速内容传输速度和改善用户体验,当前已成为现代网络架构中的重要基础服务。通过应用边缘高性能实例,某CDN客户在同等压力下的 CPU 使用率较通用实例降低 13.9~23.2%,较裸金属差异 0.2% ~ 2.9%,支撑该客户成功上云。
3.2音视频直播场景
实时音视频(Real - Time Communication)是一种允许用户在网络上进行实时的音频和视频通信的技术。它能够实现低延迟的音视频传输,广泛应用于视频会议、在线教育、直播互动、远程医疗等众多领域。边缘高性能实例为实时音视频业务提供了高效的转发能力,相较于通用实例业务性能提升24.2%,相较于裸金属实例性能基本持平。
直播场景如文章开篇所述,对于边缘计算节点有性能诉求,通过应用边缘高性能实例,为客户降低23.7%以上的CPU 占用,性能和裸金属持平。
3.3加速场景
针对前述加速场景的性能稳定性诉求,通过使用边缘高性能实例,降低VM Exit带来的性能抖动,能为业务带来和裸金属一样的延时稳定性。
4.总结与展望
目前边缘高性能虚拟机已在边缘计算节点上线应用,基于其低虚拟化损耗设计与实现,大幅降低VM Exit,提供接近裸金属的业务性能,在多个边缘场景均有较好业务收益。未来高性能虚拟机将进一步扩展业务接入范围,覆盖 GPU 等异构算力场景,持续为边缘应用提供高性价比、稳定算力支撑。欢迎感兴趣的用户通过如下渠道沟通交流,接入边缘计算节点、体验低延时算力。