1. 论文信息

  • 文章来自ASPLOS,2023,CCFA
  • TPP: Transparent Page Placement for CXL-Enabled Tiered-Memory

所有作者及单位

  • Hasan Al Maruf,Mosharaf Chowdhury – University of Michigan密歇根大学
  • Hao Wang,Niket Agarwal,Pallab Bhattacharya – NVIDIA
  • Abhishek Dhanotia,Johannes Weiner,Chris Petersen,Shobhit Kanaujia,Prakash Chauhan – Meta Inc.

2. Background

  • CXL [7] 是一种基于 PCI Express(PCIe)接口的开放式、业界支持的互连。
    它支持主机处理器和设备(例如加速器、内存缓冲区、智能 I/O 设备等)之间的高速、低延迟通信。
  • CXL 在同一物理地址空间中提供字节可寻址内存,并允许使用标准内存分配 API 进行透明内存分配。
  • CXL-Memory 访问延迟也与 NUMA 访问延迟类似。

这篇文章将直接附加到 CPU 的内存称为本地内存,将 CXL 附加内存称为CXL-内存。

补充:现在CXL同时支持多种内存的应用案例都是DRAM和HBM(是一种高带宽内存 High Bandwidth Memory)。HBM更适用于对带宽要求极高的场景,如高端GPU、AI加速卡等。HBM单片容量较小(4-16GB),但带宽巨大(超过500GB/s)。

3. 解决了什么问题

现实实践中面对的问题:
数据中心应用程序的内存需求增加在META公司中每一代硬件内存消耗的能源和总花费占比都在不停增长。

同类服务器设计中的扩展挑战内存控制器仅支持单代内存技术,这限制了不同技术的混合搭配,具有不同的每 GB 成本和带宽与延迟配置。大内存容量都是2的几次方。限制了细粒度;每一代服务器的带宽和容量都有限制。图4

数据中心应用程序的轻量级表征现有的工具会导致较高的 CPU 开销(每个核心超过 15%),并且通常会减慢应用程序的速度。

4. 其他学者解决这个问题的思路和缺陷

5. 围绕该问题作者如何构建解决思路

5.1采样数据工具

Chameleon 的主要用例是了解应用程序的内存访问行为,即应用程序内存的哪一部分保持热-温-冷状态、页面在特定温度层上存活多长时间、访问它们的频率等等。长期内存。

收集器做两类采样,放入hash表,定时唤醒。
收集器唤醒工作线程以处理当前哈希表中的数据,并移动到另一个哈希表以存储下一个间隔的采样数据
工作器处理哈希表里的数据,统计每个页面的位图大小是64位,生成报告后休眠。

load是从内存读取数据到处理器的寄存器中的指令,而store则是将寄存器中的数据写入内存的指令。两者都是与内存打交道的指令,但方向不同,load是内存到寄存器,而store是寄存器到内存。

我们使用 Chameleon 来分析我们生产中运行的跨不同服务域的各种大型内存绑定应用程序,并进行以下观察。

  1. 访问的内存的很大一部分在几分钟内保持冷状态。我们可以将其卸载到慢速层内存,而不会对性能产生重大影响。
  2. 大部分匿名内存(为程序的堆栈、堆和/或 mmap 调用创建)往往更热,而大部分文件支持的内存往往相对更冷。
  3. 页面访问模式在有意义的持续时间(分钟到小时)内保持相对稳定。这足以观察应用程序行为并在内核空间中做出页面放置决策。
  4. 工作负载对不同页面类型(文件和匿名页面)具有不同程度的敏感度,并且随着时间的推移而变化。
  5. 冷页重新访问时间因工作负载而异。分层内存系统上的页面放置应该意识到这一点,并主动将热页移动到较低的内存节点,以避免高内存访问延迟。于Web而言,几乎80%的页面会在 10 分钟内被重新访问。

5.2架构设计

TPP 将“较热”页面放置在本地内存中,并将“较冷”页面移动到 CXL 内存中。
TPP 的设计空间可分为四个主要区域:

  • (a) 轻量级降级到 CXL-Memory,
  • (b) 解耦分配和回收路径,
  • (c) 热页升级到本地节点,
  • (d) 页面类型感知内存分配。

一般来说NUMA系统的回收顺序是:首先回收本地节点上不活跃的页面;然后回收远程节点上不活跃的页面;如果还不够,才考虑回收本地节点上最近最少使用的页面。所以在图的上面①会将本地回收候选页面迁移到CXL节点的降级列表中,除非本地节点的容量小于工作集大小的热部分,否则在回收期间热页面迁移到 CXL 节点的机会非常低。如果降级期间的迁移失败(例如,由于 CXL 节点上的内存不足),我们将回退到该失败页面的默认回收机制。

Linux为节点内的每个内存区域维护三个watermakes(最小、低、高)。如果节点的空闲页面总数低于low_watermark,Linux会认为该节点面临内存压力并启动该节点的页面回收。在我们的例子中,TPP将它们降级为CXL节点。对本地节点的新分配将停止,直到回收器释放足够的内存以满足high_watermark。由于分配率较高,回收可能无法跟上,本地内存分配频繁停止,更多页面最终出现在CXL节点中,最终降低应用程序性能。所以现在将回收和分配化为不同的门槛②,回收和驱逐会提早发生,而禁止页面分配会在内存饱和度更高一步的时候。

NUMA系统中CPU访问另一节点页面时,生成缺页异常提醒内核进行页面迁移。不常访问的页面产生的升级流量很容易填满本地节点的空闲空间,并为CXL节点产生更高的降级流量。于是通过页面在LRU列表中的位置来检查页面的年龄。如果故障页面处于非活动LRU状态,我们不会立即考虑该页面进行升级,因为它可能是不经常访问的页面。仅当在活动 LRU 中找到故障页面(图13中的①)时,我们才将其视为升级候选页面。这大大减少了升级流量。

然而,操作系统使用LRU列表进行回收。如果内存节点没有压力并且回收没有启动,则非活动LRU列表中的页面不会自动移动到活动LRU列表。由于CXL节点可能并不总是处于压力之下,因此经常可以在非活动LRU列表中找到缺页的页面,又会没法向上迁移。为了解决这个问题,每当我们在非活动LRU列表中发现缺页异常时,我们都会将该页面标记为已访问,并立即将其移至活动LRU列表(图13中的②)。如果在下一次NUMA提示缺页异常,则它将处于活动LRU中,并提升到本地节点(图13中的③)。

6. 从结果看,作者如何有力证明他解决了问题

因为工作负载就这些特性,那就直接对症下药,效果都挺明显的。

7. 缺陷和改进思路

但是换了workload就没这个效果了。按照这种方式,每家都得自己去设计啰。

8. 创新点

是根据工作负载来设计架构的,关注的问题点比较小,也就容易做到很细致出色吧。

9. 积累

一个奇怪的现象,虽然大家可能观察值不同,但是最后系统设计都比较像,好像这两部分可以分裂一样。
那个Chameleon工具,说是开源但是并没有,之后可以再去看看。
TMO: Transparent memory offloading in datacenters. In ASPLOS, 2022.可以看看。


文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录