OpenAtom openEuler(简称“openEuler”或 “开源欧拉”)作为全场景开源操作系统,是连接底层硬件和上层应用的桥梁。在计算领域,面对异构硬件(CPU+XPU)、高速互联总线(UB、CXL等)以及通智算融合负载(大数据,生成式推荐,AI推理等)的演进和挑战,其核心任务是在资源与负载之间,扮演关键的总调度和总指挥角色,实现硬件资源和软件负载的精准匹配和按需供给,融合异构算力,构建异构融合计算基础设施框架。
本文介绍openEuler高速互联场景下内存利用率提升的解决方案。
在当前云场景下,随着服务器主机内存容量的持续增长,内存成本占整机成本比例已超过50%,而虚拟机平均内存利用率长期偏低,导致资源闲置严重,亟需通过技术创新提升内存资源利用效率,以降低整体TCO(总拥有成本)。基于灵衢总线首次实现了跨节点内存调配,为构建高效、弹性、可调度的内存资源池提供了底层硬件支撑。在此基础上,Memlink融合内存池化与内存超分技术,构建统一的跨机架内存资源池,实现内存资源在集群粒度下的弹性复用与智能调度,有效提升集群内虚拟机内存利用率。
Memlink是基于灵衢总线的虚拟化内存超分服务,为集群场景下的虚拟机内存回收,集群间内存调配提供基础服务,从而提升整个集群的内存利用率。
从单机视角看,传统虚拟化架构因隔离机制导致Host无法感知Guest内部的内存语义(如空闲、使用状态),致使虚拟机内存采用“预占式”分配策略——例如,一个4U8G虚拟机在创建时即占用 8GB 大页内存,且在运行期间持续保留,即使Guest内部实际内存使用远低于此值。Memlink通过引入Host感知Guest前端内存语义的通道,使 Host能够实时感知并回收Guest内部的空闲内存,显著提升单机内存资源的利用率。
从集群视角看,依托灵衢总线的高带宽、低延迟互联能力,主机可实现对远端主机内存的直接访问与借用。当本地主机内存资源紧张,甚至触发OOM(Out-of-Memory)时,系统可自动发起跨节点内存借用机制,实现内存资源的紧急调配与业务连续性保障。
Memlink体系通过“内存池化+超分+跨节点调配”三重机制,结合精细化的资源管理与调度策略,实现了虚拟机部署密度提升达20%,在保障性能与稳定性的前提下,显著优化了云平台内存资源的利用效率与整体经济性。
Memlink之所以能够在集群虚拟化场景下达到20%的内存超分比,关键在于虚拟机内存按需申请、回收以及集群间的内存借用技术。
当前大页虚拟机的大页内存是预占的,即虚拟机在启动过程中就将大页分配好,然后在整个虚拟机生命周期中都是静态预占的,这是由于libvirt、QEMU生态当前只支持大页预占,不支持按需分配。

大页预占会导致内存超分失效,Memlink支持在虚拟机创建的时候按需分配大页内存,只有在虚拟机缺页时才会分配物理内存。虚拟机启动以及运行的过程中,只会占用部分大页内存,其他的大页内存可以被分配给其他虚拟机使用。
大页按需分配的具体实现流程如下:
当前虚拟化场景中,虚拟机内部的内存使用情况对Hypervisor侧完全黑盒,Hypervisor不能识别到虚拟机内部的空闲、使用中等内存语义,导致云服务厂商为虚拟机分配的内存资源存在浪费。所以需要一种能感知到虚拟机内部内存语义的GH协同技术,如Balloon、FPR等技术,能够将虚拟机内部的空闲内存尽量释放出来。FPR原生可以支持2M大页虚拟机,但是原生的Balloon技术却无法对2M大页虚拟机内存进行释放。为此 Memlink在Balloon的原有基础上对2M大页虚拟机内存释放进行了支持。

整体实现思路是:Memlink利用virtio-balloon驱动定期获取虚拟机内部的内存占用信息,如空闲和使用信息,如果当前虚拟机的空闲内存较多则利用Balloon机制将虚拟机内部的空闲内存按一定量进行回收释放。另外,针对高版本的(5.7内核以上)的 GuestOS提供了FRP机制释放虚拟机内部空闲内存,该机制会在GuestOS内部的内存释放流程中唤醒 FPR 线程,在该线程中发起对虚拟机内部2M大页的回收。
由于Balloon前端(虚拟机内部)驱动每次从伙伴系统都是按page(4K)的粒度“充气”,且在灵衢场景虚拟机配置的是2M大页,所以需要在后端QEMU侧维护一张全局的bitmap表。表中每位代表1个page(4K),当前端驱动充气后会把充气的内存信息(GPA 地址)告诉后端 QEMU,QEMU收到内存信息(GPA 地址)后,再将bitmap中对应的位置位。如果有连续512个位置位后,即表示1个完整的2M大页被释放了,则调用madvise或fallocate接口真正释放此 2M 物理内存。这样就实现了内存回收。
Balloon过程的整体实现流程如下:
虚拟机内部的FPR(Free Page Reporting),linux 5.7 以上,前端驱动每次会申请2M及以上连续空闲内存,然后传递到后端进行释放,所以适用于2M大页虚拟机。
FPR 实现流程如下:
在内存复用场景下,单主机按照内存规格的20%超分下发虚拟机,在极端场景下会存在本主机的所有内存总量不满足业务要求,即业务要求的内存量大于本主机内存规格,此时如果不采取任何措施则会导致虚拟机被OOM kill。在集群场景下,利用内存借用技术可以缓解这个问题,当本主机内存不足时并且集群中其他主机内存足够,则发起紧急借用流程,在短时间内完成内存借用,从而最大程度避免对业务影响。

整体实现思路是:当QEMU分配大页失败时(主机大页不足),则hugetlb通OOM notify 机制通知到 SysSentry,通过notify机制通知到节点管理器,由节点管理器进行决策从哪个远端节点发起内存借用,借用完成后将借过来的内存设置成大页供虚拟机使用。
整体实现流程如下:
Memlink借助与灵衢总线高速互联的特性,借助内存借用、虚拟机内存动态按需调配等基础能力,实现了集群场景下虚拟机内存超分的功能。在内存价格疯涨的今天能够为用户降低更多的成本。未来Memlink将针对虚拟机内部的碎片内存,冷页内存等做进一步的回收/压缩。进一步提高Memlink在集群场景下的内存超分比,降低用户内存使用成本。