大规模数据中心的内存需求急剧增加,此时,CXL 带来的内存扩展将可能成为这一问题的解决方案。然而,如果没有有效的内存管理(比如页面放置),可能会导致本地内存和 CXL 内存这一分层内存性能下降。
因此,作者提出一个操作系统内核级的应用程序透明页面放置策略,无需应用程序特定的提示,能够有效地做到从本地内存将冷数据降级到 CXL 内存,从 CXL 内存将热数据提升到本地内存。
Introduction
- 内存分层是否有益?
- 静态层面上每个应用程序在一定时期内,页面们的冷热度是否保持不变;同一应用程序的不同类型页面是否有不同的冷热度;不同类型的应用程序申请的页面是否有不同的冷热度;(performance 的前提)
- 动态层面上能否以较低的开销实时监测页面的冷热度;(efficiency 开销是否值得)。然后作者构建了一个用户态工具 Chameleon,使用现有 CPU 的 PEBS 机制表征应用程序的内存访问行为,并生成不同类型的页面(匿名页面,file page cache,共享内存等等)的热力图。
- Chameleon 表征(1)很大一部分的工作集是暖/冷的,可以卸载到低速层而不会对性能带来严重影响;(2)大部分匿名内存(堆内存,栈内存,mmap)往往更热,而大部分 file page cache 更冷;(3)页面访问模式一定时间内保持稳定(分钟到小时);(4)通过新的(取消)分配,实际物理页地址可以相当快地将其行为从热更改为冷,反之亦然。静态页面分配会显着降低性能。
- 基于 Chameleon 的观察,提出操作系统级透明页面放置机制 TPP,有效地将页面放置在分层内存系统中,以便相对热的页面保留在快速内存层中,而冷页面则移动到慢速内存层中。三个组件
- 轻量级回收机制:将较冷页面降级到低速层;
- 将多 NUMA 系统的分配和回收逻辑解耦,以维持高速层节点上的空闲页面空间;
- 页面提升机制:有效的识别低速层中的热页,已将其提升到高速层;
- 同时支持页面类型感知分配,可以将匿名页面放置到高速层,file page cache 放置到低速层。
Motivation
数据中心应用对内存的需求日益增长;
CPU 和内存的紧耦合设计限制了灵活性和可扩展性;而 CXL 的到来有助于独立扩展内存资源,并确保更好地利用闲置资源;
meta 应用程序分配的内存中有 55%-80% 在任何两分钟间隔内保持空闲状态,如果将这些内存页面迁移至低速层,将可以为更多热页分配到高速层。
Chameleon
一段时间内页面的冷热度
Web,cache,warehouse,Ads 四类应用程序,在任何两分钟间隔内,分配的内存中有 55%-80% 是闲置的(这两分钟内没有被访问),可以将这些页面迁移至低速层。
不同类型页面的冷热度
大部分匿名页面是热的,然而 file page 则相对较冷。
随着时间推移,不同类型页面的使用情况
Web 服务开启时,将虚拟机的二进制和字节码文件加载至内存,此时 file page 占据大部分内存,随着时间推移,file page 比例逐渐减少,匿名页面比例之间增加。
Cache 应用程序的 file page 占据 70-82%。
Data Warehousr 工作负载的匿名页面占据 85%。
大部分应用程序的匿名页面和 file page 比例比较稳定,因此,页面放置机制在做决策时,应该具备感知页面类型的功能(这有什么关联吗?)
页面类型对性能的影响
大多数情况下,随着匿名页面的使用增加,应用程序的吞吐量增加。
页面重用时间粒度
Web 和 Cache 应用程序 80% 的页面在十分钟间隔后会得到访问,而 Warehoust 应用程序则只有 20%,Warehoust 会持续分配新页面(扫描工作负载)。
TPP
轻量降级到 CXL 内存
本地内存使用 LRU 链表,当本地内存容量达到降级水位时,将 LRU 尾部对象异步迁移至 CXL 节点;如果有多个 CXL 节点,则降级至距离当前 CPU 最近的那一个。
解耦分配和回收
原有逻辑中,如果节点空闲内存低于低水位,TPP 将冷页面降级到 CXL 节点,并且,本地节点的内存分配将中止指导回收器释放了足够的内存达到高水位。由于回收比分配慢,本地内存节点频繁中止分配,更多的页面被分配到 CXL 节点,导致性能下降。
因此,有必要为本地内存预留足够的容量,如此一下,新的分配可以蜂拥至本地内存节点(新的分配页面往往很流行),并且本地内存节点可以接收来自 CXL 节点的页面提升。
具体做法就是设置降级水位和分配水位,当达到降级水位时,将 LRU 的尾页面迁移至 CXL 内存,此时仍可以在本地内存节点分配内存。
