内存池化提供了一种经济高效的方法来提高数据中心内存利用率和容量。CXL支持对远端内存的高性能直接访问,使内存池化越发实用。然而,在多租户公有云中,当多个不同租户的虚拟机共享一个内存池时,已有的内存卸载技术存在不足,因为它们忽略了虚拟机内应用程序的差异和各租户之间的干扰。在 2026 RISC-V Summit 中国峰会龙蜥 RISC-V 生态共建分论坛上,上海交通大学计算机学院助理研究员庞浦分享了《多租户公有云共享 CXL 内存池场景下的内存卸载研究》。他介绍了团队开发的一个面向多租户公有云共享内存池的内存卸载系统。该系统利用轻量级性能劣化预测模型以及冷热数据协同卸载方法,可以最大限度地卸载数据,同时确保每个租户的应用程序都能满足服务水平协议(SLA)。
以下内容介绍了这项研究的背景、系统方案与实验结果。当前工作在 x86 平台上完成,庞浦也希望未来能够在 RISC-V 平台推进已有研究,并探索新的方向。
(图/庞浦)
从内存成本与资源碎片出发
目前,很多云厂商用户虚拟机里的数据,并不是都被均匀访问,总会有冷数据和热数据。根据学术界公开文献的统计,可以发现很多虚拟机里的数据其实没有怎么使用。这些不常用的数据,是否有机会放到更慢的介质上?冷数据实际上有可能放到更慢的介质上,并且不影响用户的性能,这就是我们研究所面临的问题。
内存成本是这一研究的重要背景。我们曾用一个玩笑形容它的昂贵:过去,奢侈品往往是爱马仕;未来几个月或几年,体现身价的物品也许会变成内存条,包上挂着32GB、256GB 乃至 512GB 的内存条。这一比喻背后,是我们对内存成本及其利用效率的关注。
然而,高成本并不意味着高利用率。数据中心和云厂商长期面临内存利用率不足与资源碎片问题:服务器上仍有内存,却难以继续以虚拟机或云资源的形式提供给用户。其中一个重要原因是,云厂商通常按照峰值需求配置虚拟机的内存容量,而应用并不一定始终使用全部配置容量。
进一步观察虚拟机内的数据访问行为,可以发现数据并非被均匀访问,而是存在冷热差异。学术界公开文献的统计也显示,许多虚拟机中的部分数据很少被使用。由此,我们提出一个问题:能否将这些不常访问的冷数据放到更慢的介质上,同时不影响用户感知的应用性能?这一问题构成了我们开展内存卸载研究的出发点。
共享内存池:在资源利用与用户体验之间寻求平衡
怎么缓解内存碎片的问题?现在有一个很火的概念叫超节点,也就是这里所说的内存池化。现在有很多协议支持这样的超节点,各家都有自己的实现超节点的方式,很多相关产品也已经商用化。所谓超节点,就是通过某种协议,把多台服务器连接到一个外置内存池。这个内存池支持以内存语义直接访问池里的数据,其性能介于本地 DRAM 与 NVME 之间。
内存池还为存量内存的再利用提供了空间。例如,数据中心过去淘汰的 DDR4 等老旧内存,可以安装到内存池中继续使用。在内存成本较高的背景下,延续这些资源的使用价值,也具有现实意义。
我们研究的系统采用 CXL Box 形态:多台服务器通过总线连接到外置内存池,用户虚拟机运行在各台服务器上。与资源超卖希望提高利用率的思路相近,我们希望由云厂商在后台调整数据放置,将部分数据卸载到成本较低的内存池,并使这一过程对用户透明。核心要求是满足 SLA,让用户尽量感知不到数据迁移至较慢介质所带来的性能变化。
因此,数据卸载并不是单纯追求更高的卸载比例,而是在释放本地内存的同时保持虚拟机性能。例如,微软在相关论文中介绍了一种做法,通过技术手段将虚拟机性能损失控制在 5% 以内,以减少用户感知。这一文献中的做法,也为我们理解性能约束提供了参考。
这一目标还需要满足隐私约束。云厂商通常不知道,也不应该探查用户在虚拟机中运行了什么程序;程序的运行方式、开始和结束时间,都属于用户隐私。我们需要解决的关键问题是:在不了解应用内部运行情况的前提下,如何控制数据卸载,并将性能损失保持在用户可接受的范围内。
三个关键问题:如何预测、卸载多少、卸载哪些数据
首先,我们需要从云厂商的视角判断,将用户的一部分数据卸载到内存池后,虚拟机性能究竟变化了多少。在不探查应用程序的条件下,可利用的信息主要来自宿主机操作系统或服务器的底层指标,例如微架构指标 CPI,以及 Linux 内核提供的 PSI。为验证它们的适用性,我们进行了实验,比较指标预测结果与应用实际性能劣化。
实验表明,这两类指标在当前场景中均存在局限。对于 CPI,预测结果波动较大:图中的红线表示卸载部分数据后应用的真实性能变化,灰线表示基于 CPI 估算的性能劣化,两者之间的差异使其难以准确反映应用表现。
我们考察的 PSI 指标同样难以适用于这一内存池场景。这里使用的 PSI 统计口径关注 swap 交换路径上的停顿时间,而共享内存池的数据访问走直接内存通道,不经过 swap 路径。因此,仅凭这一指标无法有效反映卸载带来的性能变化。这也促使我们探索新的指标,帮助云厂商估算数据卸载后的性能劣化程度。
能够估算性能变化后,还需要决定卸载多少数据。我们观察到,学术界不少工作主要关注单个虚拟机,未充分考虑公有云中的多租户差异,通常采用固定阈值规定各虚拟机的卸载比例。不同用户运行的应用并不相同,统一阈值难以兼顾资源利用收益与 SLA 约束。
为说明这一差异,我们对不同应用运行组合进行了实验。即使统一卸载 40% 的数据,也可能出现三种结果:第一种情况下,性能变化仅约 1.1%,意味着仍可能有进一步卸载的空间;第二种情况下,卸载了较多数据,性能损失又恰好处于 SLA 限制内,符合云厂商的期望;第三种情况下,同样的卸载比例却导致性能劣化超出 SLA 要求。
这些结果说明,卸载比例需要与各虚拟机的运行特征和性能约束相匹配。我们因此不采用面向所有虚拟机的统一阈值,而是探索差异化的数据卸载策略,在满足SLA的前提下争取更大的资源利用空间。
除卸载比例外,数据的选择同样重要。直观上,应该优先卸载用户不常使用的冷数据,这一思路基于本地内存访问性能优于远端内存池的假设。然而,多租户环境中的资源竞争可能改变这一关系。尤其在 HPC 等应用大量占用本地内存带宽时,带宽瓶颈可能使本地访问延迟高于远端内存池。此时,适量卸载热数据反而可能改善性能。
我们将相关学术工作与 Linux 内置的 NUMA interleave 策略进行了比较。实验中,Linux 内置策略在部分情况下甚至表现更好。这提示我们,卸载决策不能只依据数据冷热,还需要判断本地内存带宽是否已经成为瓶颈;当这一瓶颈出现时,热数据卸载也应纳入策略考虑。
三个组件协同,实现性能感知的内存卸载
基于上述观察,我们构建了一套包含三个组件的系统,分别回应性能预测、冷数据卸载比例和热数据卸载比例三个问题。第一个组件估算卸载后的应用性能劣化,第二个组件依据预测结果与 SLA 目标调整冷数据卸载量,第三个组件识别本地内存带宽瓶颈并决定热数据卸载量。三个组件共同服务于资源利用与应用性能之间的平衡。
对于性能预测,我们探索使用 CPU 访存路径上的停顿周期,即 CPU stall cycles,作为间接指标。此前,我们在 Intel、AMD 和 ARM 处理器上开展过相关研究,取得了一定效果。目前实验室尚无 RISC-V 设备,因此还没有在该平台验证这一方法;我们希望未来探索类似指标及方法在 RISC-V 上的可行性。
为什么用 CPU 停顿周期判断性能变化?把用户内存数据卸载到内存池后,应用为什么会跑得更慢?本质上,是内存池介质的性能比本地内存差。CPU 在访存路径上的各组件上等待数据加载的停顿周期会变长。我们通过这样的间接指标,推断性能变化。
具体而言,我们先让用户虚拟机完全使用本地内存运行一段时间,记录运行时间、CPU 总停顿周期与总指令数;卸载数据后,再采集相同指标,通过近似公式估算应用相对于完全使用本地内存时的性能下降比例。该公式有一个关键前提:建立基准时的应用负载与卸载后的应用负载需要大致相当,否则两组指标缺乏可比性。
为缓解负载变化对预测的影响,我们使用 L1 cache 的 load 次数与 store 次数,作为每次采集指标的索引,辅助判断应用行为。只有当当前应用行为与先前采集的指标相匹配时,才将数据代入公式计算。这样,预测不再仅依赖一次固定基准,而是增加了对应用行为可比性的判断。
在预测结果图中(上图左侧),红线表示应用真实的性能劣化,蓝线表示近似方法的估算结果。两者已经较为接近,但预测仍存在波动。在不了解应用内部运行情况、仅依靠底层指标推断的条件下,我们难以实现完全精确的预测,因此仍需认识并保留这一误差边界。
在性能预测的基础上,第二个组件负责决定卸载多少冷数据。我们结合估算的性能劣化比例与具体SLA目标,通过启发式方法调整卸载阈值,使冷数据卸载量与各虚拟机的性能约束相匹配。
第三个组件则关注热数据。为了维持前两个组件工作的正确性,我们需要避免本地内存访问带宽成为瓶颈。一旦识别到可能出现带宽瓶颈,就将一部分热数据迁移至远端内存池,缓解本地带宽压力。
但热数据卸载并非越多越好。过量卸载虽然能够缓解本地带宽瓶颈,却可能因远端访问开销导致应用性能进一步下降。因此,我们只卸载足以缓解本地内存带宽瓶颈的那部分热数据,而不以提高热数据卸载比例本身为目标。
实验结果与应用负载变化下的适应性
我们在一台 x86 机器上完成了整套系统的实验,外接容量为 512GB 的 CXL 内存池,并与相关学术方法及 Linux 内置的 interleave 策略进行比较。
整体而言,我们的系统在卸载数据量方面取得了优于对比方法的结果。其中,相比 Linux 内置的 interleave 策略,卸载数据量最多增加 30% 多,显示了进一步提高内存资源利用率的潜力。
除了固定应用组合,我们还考察了用户更换程序时系统能否继续工作。实验显示,系统可以适应这种变化,但需要重新采集一段时间的基准指标,以判断程序形态变化后原有公式是否仍然适用。在这段短暂的基准重建期内,系统不能卸载数据;完成重新采集后,再根据新的应用行为继续作出决策。
在性能约束下,探索内存资源的高效利用
围绕多租户公有云中的内存利用率不足,我们尝试将性能劣化预测、差异化冷数据卸载与带宽感知的热数据卸载结合起来,在用户隐私和SLA约束下寻找资源利用与应用性能之间的平衡。现有x86实验展示了增加卸载数据量、适应应用负载变化的效果,但预测误差与负载切换时的基准重建仍是这项研究的局限。
我们希望,这项工作能够为云端内存资源的高效利用提供新的研究思路。后续也期待在 RISC-V 平台继续探索,让已有研究与新的方向获得更充分的验证。提高内存利用效率,不只是将数据移向另一种介质,更需要在可观测的底层指标、有限的应用信息与明确的性能约束之间,建立可靠的卸载决策。
—— 完 ——