Managing Memory Tiers with CXL in Virtualized Environments——论文阅读

OSDI 2024 Paper CXL论文阅读笔记整理

问题

内存分层可以扩展内存容量并降低数据中心的总体拥有成本(TCO)。在公共云中,虚拟机(VM)内存大小正在增加,每个虚拟CPU的典型配置为4-32GB[6,7,12]。然而,由于与扩展DDR DIMM容量相关的物理限制,通过DDR通道访问的DRAM容量落后于可用内核的快速增长[73,91,92]。为此,云提供商通过添加容量存储层来增强常规本地访问的DRAM,称为性能层[61,72,78,84,99]。Compute Express Link(CXL)标准[8,91]提供了通过PCIe总线访问DRAM或非易失性存储器(NVM)的新机制,可以显著扩展存储容量。在本文中,关注的是CXL内存设备本地连接并专用于单个主机的基本用例[91,98]。这个用例现在可以部署,并扩展到未来的内存池[46,77,78]。

挑战

云提供商希望部署基于CXL的内存,以增加总内存容量、降低成本。然而,CXL访问的延迟高于本地DRAM。为了利用CXL内存有两种方法。

软件管理的内存分层

假设软件(管理程序或操作系统)对数据放置有完全控制权,即特定页面是位于容量层还是性能层[45,61,70,74,78,84,89,90,99100]。软件管理的分层需要跟踪内存访问,以识别频繁访问的数据,并将其放置在性能层中。但由于管理程序/OS不参与大多数内存访问,因此它必须依靠页表操作管理(例如,扫描访问位[61,84100]或PTE中毒[45,70,84])或指令采样(例如,Intel PEBS采样[61,74,89]和AMD IBS[4])来跟踪内存访问。但这些方法在虚拟化环境中面临着严重的局限性。(1)VM不支持指令采样,这会影响隐私。(2)细粒度页表操作消耗了过多的主机CPU周期[44,79],导致较高的CPU开销。(3)管理程序/操作系统只能以页面粒度管理内存,对于冷热数据混合在同一页面上的情况,会导致次优决策[76],对于使用较大页面大小(例如2 MB和1 GB)来减少开销的管理程序来说,这尤其成问题。

基于硬件的内存分层

以缓存行粒度管理数据。例如:英特尔扁平内存模式,这是CXL的第一个硬件管理分层系统,基本架构如图3。在处理器内存控制器(MC)内,以缓存行粒度透明地管理两层之间的数据放置。将数据排他的放置在任一层,将本地DRAM和CXL内存的总容量暴露给软件。执行方式如图4,通过将最近访问的行与曾经占用本地DRAM的行交换,将它们升级到本地DRAM。支持混合模式,该模式保留一定数量的专用页面,这些页面保证驻留在本地内存中,其余页面相关的缓存行则根据最近是否被访问而放置在本地或CXL内存中。

对基于硬件的内存分层进行全系统原型的评估表明,相比与全部使用本地内存:只有硬件分层内存,73%的工作负载的速度减慢不超过5%,86%的工作负载速度减慢不超过10%。在混合模式下,33%专用本地DRAM和67%硬件分层内存,82%的工作负载减速不超过5%,95%的工作负载减速不超过10%,其余工作负载,性能下降高达34%。

性能下降由于以下两个原因:

  • 租户间的本地内存争用。根据英特尔扁平内存模式设计,两个冲突的物理内存行会竞争同一本地DRAM行,当冲突的页面分配给不同的虚拟机时,导致性能干扰。实验表明73%的工作负载由于本地DRAM冲突导致10%以上的速度减慢。(主要原因)

  • 由于访问模式冲突导致的租户内部LLC争用。

本文方法

本文提出了Memstrata,轻量级的多租户内存分配器,结合软硬件管理的方法。

  • 识别具有冲突缓存行的页面,采用页面着色将其分配给同一个租户来消除租户间争用。

  • 通过在线减速估计器评估每个租户的分层内存缺失所产生的开销,使用四个指标:L3缺失延迟、L2缺失延迟、TLB未命中延迟、L2 MPKI(每千条指令的本地内存缺失次数),随机森林进行分类。根据未命中率进行排序,在租户间动态分配专用的本地内存页,以提高对内存延迟最敏感的租户的性能。

开源代码:Bitbucket

在支持英特尔扁平内存模式的原型硬件上进行多VM实验,Memstrata能够识别性能异常值,并将其退化从30%以上降低到6%以下,从而在各种工作负载中提供一致的性能。在所有实验中,Memstrata的最大CPU开销是单核的4%,不到每个VM单核的1%。

实验

实验环境:预生产的Intel®Xeon®6处理器,该处理器实现了Intel®扁平内存模式。测试服务器包含一个带有128GB DDR5本地内存和128GB DDR5-CXL内存的单个插槽。CXL内存通过三个CXL卡连接,每个卡可容纳两个DDR5-4800 DIMM,并提供x16 PCIe5 CXL连接。使用预生产的Astera Labs Leo CXL智能内存控制器[22]。CXL内存的空闲延迟大约是本地内存延迟的200-220%,每个CXL卡的最大带宽约为50 GB/s[91]。

实验对比:应用速度减慢比例

实验参数:不同应用

总结

针对利用CXL进行内存分层,基于软件会消耗过多CPU且只能在页面粒度迁移,基于硬件受限于组合间内存争用和租户内LLC争用。本文提出软硬件结合的CXL分层系统 Memstrata,基于Intel®扁平内存模式进行软件层优化,在各种负载下提供了类似于本地DRAM的性能,能够将内存容量扩展1.5倍。使用两个技术:(1)识别冲突缓存行的页面,采用页面着色将其分配给同一个租户来消除租户间争用。(2)使用四个指标:L3缺失延迟、L2缺失延迟、TLB未命中延迟、L2 MPKI(每千条指令的本地内存缺失次数),利用随机森林进行分类。根据未命中率在租户间动态分配专用的本地内存页,以提高对内存延迟最敏感的租户的性能。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GNU Make 是一个广泛使用的项目管理工具,它可以帮助我们自动化构建和管理项目。它的核心思想是基于规则来定义项目的构建过程。 首先,我们需要在项目的根目录中创建一个名为“Makefile”的文件,用于定义项目的规则和依赖关系。Makefile 是用来告诉 GNU Make 如何构建和更新项目的文件,它由一系列规则组成。 每个规则由一个目标(target)和相应的依赖列表组成。目标是指我们希望生成的文件或执行的操作,而依赖列表则表示生成目标所需要的文件或操作。当某个目标的依赖发生变化时,GNU Make 将会自动检测并更新相应的目标。 在 Makefile 中,我们可以使用一些预定义的变量来简化配置,如 CC 表示编译器,CFLAGS 表示编译选项等。我们还可以定义自己的变量,以便在规则中使用。 通过定义规则和依赖关系,我们可以利用 GNU Make 来自动构建项目。当我们运行 make 命令时,GNU Make 将会读取 Makefile,并根据规则和依赖关系来判断哪些目标需要重新构建,然后执行相应的命令。 GNU Make 还支持一些高级特性,如条件判断、循环、递归等,这使得我们可以根据不同的情况来定义不同的规则和行为。 总之,GNU Make 是一个强大而灵活的项目管理工具,它允许我们根据项目的需求来定义规则和依赖关系,并自动化构建过程,提高项目的开发效率和可维护性。无论是小型项目还是大型项目,GNU Make 都是一个极为有用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值