阿里技术 10小时前
兼顾IO高性能与内存资源使用效率—阿里云虚拟化团队OSDI'25 VIO论文深度解析
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了阿里云弹性计算虚拟化团队研发的VIO技术,旨在解决云计算环境中I/O虚拟化面临的性能与资源效率的矛盾。传统直通模式性能优异但牺牲了内存弹性,而PRI等硬件依赖方案普及困难。VIO作为一款软件解决方案,通过IOPA-Snooping、IOPS-Aware Passthrough和Lockpage三大核心组件,实现了对I/O页错误的软件级支持,无需特定硬件,对客户操作系统透明。该技术能在低IOPS场景下动态回收内存,提升资源利用率,在高IOPS场景下切换至直通模式以保证性能,实现了性能与资源效率的平衡。VIO已在阿里云大规模生产环境落地,稳定运行于数十万台虚拟机集群,每日释放大量内存资源,且兼容性强,对客户系统无感知。

⚙️ **IOPA-Snooping:软件化内存缺页错误处理** VIO通过在VirtIO设备请求的每个阶段进行拦截、状态检查和安全执行,利用嵌套页表(EPT)技术提前处理内存缺页错误,避免直通设备访问非法内存。这一机制通过影子队列解耦虚拟请求与物理设备操作,确保了I/O操作的安全性和效率,平均延迟仅4微秒,且在锁定页命中时可进一步降低至3.5微秒。

⚖️ **弹性直通:动态模式切换以平衡性能与资源** VIO根据虚拟机实时I/O负载动态切换“直通模式”和“VIO模式”。直通模式提供极致性能,适用于高负载场景;VIO模式通过IOPA-Snooping回收冷数据内存,优化资源利用率,适用于低负载场景。模式切换过程原子化,数据零丢失且延迟低于1毫秒,实现了对不同业务需求的弹性适配。

🔒 **锁页策略:智能内存管理提升IO性能** VIO采用分级锁页策略,通过静态锁定高频访问页和自适应锁页(LRU算法区分活跃/非活跃列表),在保障核心数据访问效率的同时,避免锁页过度占用内存。该策略将90%虚拟机的锁页率控制在10%以内,显著降低了内存资源浪费,并提升了IO性能稳定性,尤其在缺页频率增加时,相比VPRI展现出更优的吞吐量稳定性。

🚀 **生产环境验证与兼容性:大规模落地与零感知体验** VIO已在阿里云数十万台虚拟机集群中稳定运行,每日释放相当于上万台虚拟机的内存资源,I/O相关CPU页错误率低于1%,用户体验无感知。该方案无需修改客户操作系统内核,原生支持CentOS、Windows等主流系统,并能通过Orthus工具实现KVM/QEMU组件的热升级,确保业务连续性,是云原生虚拟化基础设施优化的标杆实践。

2025-07-25 08:31 浙江

这是2025年的第82篇文章

( 本文阅读时间:15分钟 )


论文:《To PRI or Not To PRI, That's the question》,目前该论文已入选OSDI‘25。

OSDI(Operating Systems Design and Implementation)是中国计算机学会(CCF)A类会议,与SOSP并称计算机系统领域“双顶会”,代表全球操作系统、分布式系统、存储与网络等核心技术的最高研究水平。

论文作者:

Yun Wang∗♠ Liang Chen*♢ Jie Ji♢ Xianting Tian♢ Ben Luo♢ Zhixiang Wei♠ Zhibai Huang♠ Kailiang Xu♠ Kaihuan Peng♢ Kaijie Guo♢ Ning Luo♢ Guangjian Wang♢ Shengdong Dai♢ Yibin Shen♢ Jiesheng Wu♢ Zhengwei Qi♠

♠Shanghai Jiao Tong University ♢Alibaba Group 


01


问题缘起:云计算的“资源困局”

在云计算环境中,I/O虚拟化长期面临性能与资源效率之间的根本性矛盾。


一方面,追求极致性能的直通模式要求关键业务(如数据库、AI训练)直接访问物理设备(如网卡、GPU),以消除虚拟化层的开销,实现接近物理机的“零虚拟化开销”性能。然而这种直通设备需要将虚拟机内存静态绑定到物理内存,导致内存资源缺乏动态管理能力——虚拟机无法通过内存页迁移或交换机制释放未使用的冷页(长期未访问的内存页),显著限制了资源弹性。


另一方面,资源利用率的低下进一步加剧了这一矛盾:通过对在线虚拟机内存使用率的统计,我们发现80%的长期运行虚拟机仅平均占用总内存的80%,而其中高达34%的内存为冷页,这也并非个例——Google、AWS、Azure 的公开数据也印证,其数据中心内存冷页率普遍接近 30%。这些未被有效利用的资源长期处于闲置状态,导致云计算资源池的整体利用率难以提升。


PRI:硬件强依赖的“小众实验”,难解普适困局

针对这个困局,PCIe 标准中添加了页请求接口(PRI,Page Request Interface)试图通过硬件级支持(如Intel Sapphire Rapids处理器)处理I/O页错误(IOPF),在理想状态下为直通设备赋予一定的内存动态管理能力。

但其严重依赖特定硬件平台的特性,导致技术普及困难。目前,除了高端图形处理器外,大多数主流输入输出设备(如网络设备和存储设备)仍不支持该功能;且当前操作系统(如最新版Linux)仅在特定内存管理模式下支持该技术,进一步限制了硬件兼容性。这些局限性使得PRI等方案仅能在有限范围内应用,无法从根本上解决云计算环境中广泛存在的性能与资源效率失衡问题。


因此,如何在不依赖专用硬件的前提下,实现高性能直通与动态内存管理的兼容,成为突破I/O虚拟化瓶颈的关键挑战。


1.1 为什么使用直通设备需要静态分配虚拟机内存

在云计算架构中,设备直通技术使虚拟机能够绕过Hypervisor的资源调度层,与GPU、网卡等硬件直接进行数据交互,获得极致的性能体验。然而设备直通牺牲了很多弹性能力,其中很重要的一项是内存动态分配能力。

一、直通设备的技术优势与底层机制

设备直通技术通过VT-d等硬件辅助虚拟化技术,将物理设备直接暴露给虚拟机使用。其性能优势主要源于两点关键技术特征

二、内存地址静态分配的必然性分析

直通设备的DMA操作对内存管理提出了特殊要求,其根本矛盾源于虚拟化内存管理机制与硬件DMA特性之间的冲突。具体表现为:


三、技术约束与架构演进的辩证关系

静态内存映射作为直通技术的必然选择,本质上是虚拟化系统在性能与灵活性之间的取舍。当前技术架构下,这种约束主要体现为:


设备直通技术通过打破虚拟化层的性能屏障,展现了云计算架构的进化方向,但其内存管理约束本质上反映了虚拟化技术在硬件抽象与性能优化之间的根本矛盾。随着硬件辅助虚拟化技术的持续演进,未来可能通过更智能的内存管理机制,在保持性能优势的同时逐步突破当前的技术局限,实现虚拟化系统在弹性扩展与极致性能间的动态平衡。这一过程不仅需要硬件架构的创新,更依赖于虚拟化软件层与硬件资源管理的协同优化,最终推动云计算基础设施向更高阶的弹性计算模式演进。


02


学术界和工业界的探索尝试


面对 PRI 的局限,学术界和工业界都在探索在无 PRI 支持下解决 VM 内存静态分配问题的方案。

这些探索大致可分为两类,但均未能完美破局:

软件方法(如vIOMMU、coIOMMU、VProbe、IOGuard等)虽不依赖硬件升级,但普遍存在显著性能损耗问题,部分方案还需修改虚拟机软件,这在多租户云环境中因安全风险与管理复杂度而难以部署。

硬件方法(如On-Demand Paging、VPRI)通过解耦IOPF与IOMMU实现性能优化,但受限于对高端或定制化硬件的依赖,推广难度较大;同时其要求设备具备内存缺页的处理能力提高了设备设计的复杂度,实用性受限。


综观现有方案,仍然未能在低开销、高兼容性与强性能之间取得平衡。软件方案因性能瓶颈与侵入性修改无法落地,硬件方案则因成本与复杂度难以普及。因此,如何一种内存弹性机制,既能摆脱对特殊硬件或软件改动的依赖(普适兼容),又能在真实云环境中实现高校资源调度(动态管理),同时确保直通设备的性能无损(零开销),仍是虚拟化领域亟待突破的关键难题。


03


阿里云的解法:弹性直通VIO


VIO 是一个基于软件的弹性设备直通解决方案,遵循 VirtIO 1.0 标准。VIO 的设计无需依赖任何特定 CPU 或硬件厂商,完全通过软件实现了对 IOPF(I/O 页错误)的支持。与采用率较低的 ATS/PRI 方案相比,VIO 具有硬件无关性和零感知透明(对 Guest 操作系统完全透明)2大优势


VIO核心三大件:IOPA-Snooping,IOPS-Aware Passthrough和Lockpage。

3.1 IOPA-Snooping:通过“预审机制”提早处理内存缺页错误,避免直通设备访问内存异常


为了避免虚拟化环境中直通设备读写内存时触发缺页错误,VIO将VirtIO设备请求分为三个阶段构建防护机制:


第一阶段:请求拦截当VirtIO前端驱动提交可用队列(Available Queue)请求时,VIO主动拦截该请求,取代传统的直接传递至物理设备的流程。这一阶段通过将安全控制点前置,为后续验证提供了介入机会。


第二阶段:内存页状态检查通过嵌套页表(EPT)技术,系统对请求涉及的物理页进行实时状态验证:


第三阶段:安全执行当所有涉及的物理页均通过验证后,请求被转移至设备影子队列,从而允许DMA操作安全执行。该机制通过影子队列解耦虚拟请求与物理设备操作,既确保合法请求的有序执行,又避免直接暴露物理设备资源。


这一流程通过拦截、验证、可控放行的闭环机制,实现了VirtIO设备请求的全生命周期安全管控,同时保持了I/O操作的效率。

3.2 弹性直通(Elastic Passthrough):通过监控虚拟机负载水平动态切换模式,兼顾IO性能和内存使用效率


通过对线上虚拟机IOPS分布的统计,我们发现 P95 的虚拟机的IOPS小于30K。因此我们设计了动态直通模式切换方案——弹性直通。通过策略监控虚拟机IO负载压力实现模式切换:在虚拟机运行中,系统根据实时I/O负载自动选择两种模式。


如何实现用户无感的模式切换

虚拟机I/O模式动态切换通过三阶段原子化操作实现无缝转换:

直通模式→VIO模式切换系统首先冻结I/O请求(微秒级),暂停新任务进入以确保状态一致性;随后将设备原生队列的当前状态拷贝至影子队列,完成控制逻辑的平滑过渡;最后通过I/O页表(IOPT)重映射,将I/O虚拟地址(IOVA)指向影子队列的物理地址,完成虚拟化I/O路径的建立。


VIO模式→直通模式切换切换前需执行内存预热操作,通过锁定虚拟机内存页保障物理内存驻留;接着通过页表回切将IOVA映射恢复至原生队列地址空间;最后恢复直通模式下的硬件级I/O直接访问路径。


该机制通过严格的状态隔离与地址映射控制,确保模式切换过程零数据丢失且延迟低于1ms,实现高负载场景与资源优化场景间的弹性适配。


3.3 锁页策略(Lockpage):通过冷热识别算法,降低缺页频率提升IO性能

内存管理优化技术通过分级锁页策略实现性能与资源利用率的平衡:

针对I/O热点数据,系统采用静态锁页机制直接锁定高频访问页,避免因页面交换引发的性能抖动。在此基础上,引入自适应锁页进一步优化:通过LRU算法将内存页划分为活跃列表(Active List)与非活跃列表(Inactive List),当页面从活跃列表移出时自动解除锁定状态,既保障核心数据访问效率,又避免锁页过度占用可回收内存空间。该策略使90%虚拟机的锁页率控制在10%以内,仅在1%的极端场景(如Windows VirtIO驱动特殊需求)需提升至79%锁页率,显著降低内存资源浪费。


3.4 生产环境验证:数十万VM的实战数据


IOPA-snoop 延迟性能与机制优势

线上统计显示,IOPA-snoop机制的平均延迟为4微秒,其具体耗时取决于锁定页(lockpage)的命中情况。当发生锁定页命中时,系统仅需通过VIO内部位图查询,这一过程仅需90纳秒,因此总延迟可降低至约3.5微秒。若发生锁定页未命中,延迟上升至4.5微秒,此时系统需要额外耗时约1微秒检查目标页是否存在于内存中。若内存中未找到该页,则触发缺页异常(page fault),其平均处理时间为700微秒。


VIO 锁定页机制高效性

同时这一实测数据凸显了VIO锁定页机制的高效性:通过将高频访问的I/O页固定在内存中,显著减少了代价高昂的缺页异常处理需求。即使在缺页异常发生时,VIO仍能通过可控的平均处理时延(700微秒)保障系统性能。这种对I/O页访问的高效管理,使VIO能够在保持极低开销的同时维持稳定性能,充分满足大规模云环境中多样化工作负载对高吞吐、低延迟的需求。


另外通过与VPRI的性能进行对比,在缺页处理频率增加时VPRI性能会显著下降,这源于其依赖重传机制来恢复因I/O页面错误(IOPF)导致的数据包丢失。例如,在Redis场景中,当缺页频率达到每秒10次时,VPRI的吞吐量骤降60%;而Nginx和Memcached的吞吐量也分别出现了45%和57%的降幅。这种由重传引发的级联效应表明,VPRI对IOPF的频率高度敏感,尤其在事务率高或网络需求大的工作负载中表现尤为明显。


相比之下,VIO在相同条件下展现了卓越的稳定性。通过将页面错误处理与关键I/O数据路径隔离,VIO避免了数据包丢失和重传,从而将性能下降控制在极小范围内。在所有应用中,即使缺页频率较高,VIO的吞吐量降幅也始终低于10%。例如,Redis在每秒10次缺页频率下仅下降6%,Nginx和Memcached的降幅分别为9%和6%。这种一致性优势印证了VIO在多种工作负载和延迟条件下的吞吐量稳定性。


值得注意的是,在IOPF频率较低时,Redis在VIO模式下的性能表现稍逊,原因在于频繁的嗅探操作(IOPA-snooping)会因延迟累积成为瓶颈。当IOPS(每秒I/O操作)升高时,总嗅探开销会随I/O操作量的增加而线性增长。这一现象验证了弹性直通策略的合理性——在低IOPS场景中通过嗅探实现资源优化,而在高IOPS场景中切换为直通模式以维持高性能。


04


总结与展望

VIO技术已在阿里云大规模生产环境中实现成熟落地,目前稳定运行于数十万台虚拟机集群。该方案通过智能化内存回收机制,每日可释放相当于上万台虚拟机的内存资源,显著提升数据中心资源利用率,同时完全保持服务质量稳定:实测I/O相关CPU页错误(IOPF)发生率低于1%,用户在开启内存回收功能后仍保持无感知体验。


在兼容性设计上,VIO展现出强大适配能力:


这一技术方案既解决了超大规模云环境下的资源弹性调度难题,又通过极简兼容设计降低了运维复杂度,成为云原生场景下虚拟化基础设施优化的标杆实践。


05


团队介绍

阿里云弹性计算虚拟化团队:深耕前沿技术领域,持续推进云原生虚拟化技术演进,是阿里云线上千万级规模ECS的技术基座。我们团队也积极贡献学术界,研发成果先后在OSDI、SOSP、ASPLOS等国际顶会上发表,包括VIO(OSDI'25)、VPrefetch(PPOPP'25)、VPRI(SOSP'24)、VProbe(ATC'23)、BM-Hive(ASPLOS'20)、Orthus(ASPLOS'19)等,团队持续探索虚拟化与云计算的边界,为行业提供高性能、高可靠、高弹性的底层技术支持。

参考链接

[01] 论文:To PRI or Not To PRI, That's the question

https://www.usenix.org/conference/osdi25/presentation/wang-yun

文末点击原文可直接跳转论文哦!

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

VIO I/O虚拟化 弹性计算 阿里云 内存管理
相关文章