
本文选自 Horizon 2026年9月4日技术简报。
内存开始像存储一样分层
很长一段时间里,服务器内存管理的主要假设是:NUMA 节点之间虽然存在延迟差异,但内存大体属于同一类 DRAM。CXL 内存扩展、持久内存和高带宽内存进入系统后,这个假设逐渐失效。同一地址空间可能同时包含低延迟 DRAM、大容量但更慢的 CXL 内存,以及带宽更高、容量更小的 HBM。操作系统不仅要回答“是否有空闲页”,还要回答“这页应该放在哪一层”。
Linux 已支持在内存压力下把页面从较快节点降级到较慢节点。难点在反方向:慢层里哪些页已经变热,值得占用稀缺的快层容量?识别过慢,应用长期承受高延迟;识别过于积极,则迁移流量吞噬带宽,并把真正的热页挤走。近期讨论的 pghot 补丁与 memcg 分层感知,分别处理“如何识别并提升热页”和“多个租户怎样公平使用快内存”这两个问题。
页提升为什么比缓存淘汰更难
传统页面回收拥有相对明确的压力信号:快层空间不足时,可根据访问位、LRU 近似与匿名页/文件页策略挑选冷页降级。热页提升却需要持续观察慢层,并判断一次访问是偶然还是持续热点。页面大小通常为 4 KiB,一台拥有 1 TB 内存的服务器约有 2.68 亿个基础页。即使每页只增加 1 字节热度元数据,也需要约 256 MiB;若使用 4 字节精度模式,元数据接近 1 GiB。监控粒度直接影响开销。
pghot 的思路是汇集页面访问证据,检测慢内存中的热页,再由 kmigrated 内核线程执行迁移。相关版本提供每页 1 字节的默认记录,也讨论每页 4 字节的精度模式,并可追踪访问发起的 NUMA 节点。AMD IBS(Instruction-Based Sampling)还能提供采样数据,帮助系统知道哪个处理器访问了哪个地址。相比只看页表访问位,硬件采样可能更好地区分访问来源,但它也引入架构依赖、采样偏差和数据处理成本。
一次页迁移不是修改指针那么简单。内核要隔离页面、处理并发访问、复制 4 KiB 或更大的数据、更新页表映射与反向映射,并刷新必要的 TLB。若页面正在被固定、处于写回、属于大页或设备映射,迁移条件更复杂。假设系统每秒错误迁移 100 万个 4 KiB 页面,仅数据复制就约 3.8 GiB/s,还不含页表和缓存一致性开销。因此,提升策略必须考虑收益能否覆盖迁移成本,并设置滞回,防止页面在快慢层之间来回抖动。
DAMON 与 pghot 的路线争论
Linux 已有 DAMON(Data Access MONitor),它通过自适应区域和采样机制监测数据访问模式,并可结合 DAMOS 执行回收、迁移等策略。内核社区因此自然提出:热页识别是否应建立在 DAMON 上,而不是增加一套独立机制?
两条路线的差异体现了内核设计的典型张力。专用机制可以围绕页提升优化数据结构,结合特定硬件采样,快速满足 CXL 用户需求;通用框架则有利于减少重复代码,让监控、策略与动作分离。DAMON 不要求为每个页面长期保存精确计数,而是动态调整监控区域,降低大内存系统的观测成本;但页面级热度、访问 NUMA 节点和多来源融合是否能满足实际提升精度,还要通过数据证明。
内核补丁达到第八版并不意味着接近合并。Linux 开发强调维护者共识、可测收益、接口稳定和长期维护责任。没有 Reviewed-by 标签、核心维护者质疑与现有子系统重叠,通常说明设计仍在形成。企业即使急需功能,也要提供可复现负载:数据库缓存、内存 KV、图计算、虚拟机密度等场景中,命中率、尾延迟、迁移带宽和 CPU 开销究竟改善多少。单一微基准无法证明通用价值。
memcg 感知解决的是多租户公平性
即使全局热页提升工作良好,容器环境仍有资源分配问题。设想服务器有 256 GB DRAM 与 768 GB CXL 内存,比例为 25% 对 75%。如果第一个启动的容器把 200 GB 数据放进 DRAM,后续关键服务可能几乎只能使用慢层。现有 memory cgroup 主要限制总内存,并不会天然保证每个组按比例获得各层容量。
memcg 分层感知补丁试图给每个控制组建立快慢层预算。例如一个 100 GB 限额的容器可获得约 25 GB DRAM 配额与 75 GB CXL 配额。这样可避免先到先得,也便于云平台提供不同等级:延迟敏感型实例拥有更高快层比例,批处理实例使用更多容量层。
但静态比例也可能浪费资源。某容器没有用满 DRAM 时,闲置快内存是否应借给其他组?借出后怎样回收,才能不在业务高峰制造迁移风暴?更合理的控制器可能需要“保障值 + 可突发上限”:保证每组最低快层份额,空闲时允许超额使用,并根据优先级与热度回收。它与 CPU cgroup 的份额、配额思路相似,却多了数据搬迁成本。
评价分层策略不能只看平均带宽
分层内存实验至少应报告五类指标。第一是应用指标,如数据库 QPS、P99/P999 延迟、任务完成时间。第二是放置质量,包括快层命中率、被提升页面后续访问次数、误提升率。第三是迁移成本,包括每秒迁移页数、复制带宽、CPU 时间和 TLB 影响。第四是稳定性,包括页面抖动、策略收敛时间及负载切换后的响应。第五是公平性,观察多个 memcg 的性能退化是否符合服务等级。
测试集也要覆盖相位变化。一个模型加载阶段会顺序读取大量权重,推理阶段的热点分布却不同;数据库白天处理在线请求,夜间进行扫描与压缩。若算法把短暂扫描识别为热数据,DRAM 会被污染。适当的指数衰减、多时间尺度计数和提升阈值可以降低误判,但参数很难适合所有负载。将策略通过 DAMOS、BPF 或用户态提示进行一定程度的可配置化,可能比在内核里固化单一算法更现实。
对 AI 与工业计算平台的意义
AI 推理越来越受内存容量和带宽约束。大模型权重、KV Cache、向量索引和数据预处理缓冲区具有不同访问模式。把全部数据放入昂贵 DRAM 或 HBM 成本过高,CXL 提供了容量扩展路径。操作系统若能把频繁访问的 KV 块、索引上层和活跃权重页留在快层,把冷模型、历史会话和低频数据放到慢层,就能提高单机承载密度。
工业仿真与数字孪生也类似:有限元网格、求解器工作集、历史场数据的冷热差异明显。平台层应同时使用应用提示与内核观测。应用了解对象语义,可标记关键数组;内核掌握真实访问与全局竞争。二者结合,比完全依赖透明迁移更有希望。
分层内存不是“加一条 CXL 内存就自动扩容”。硬件拓扑、内核策略、容器配额和应用数据布局共同决定结果。当前补丁争论的价值,在于 Linux 正把内存从单一容量池转变为具有服务等级的资源。未来的数据中心调度器不仅分配多少 GiB,还会分配哪一层、多少带宽、允许多少迁移,以及业务在拥塞时应退化到什么程度。
参考资料
- Linux Kernel Documentation:Memory Tiering。
- Linux Kernel Documentation:DAMON 与 DAMOS。
- LWN:近期 Linux memory tiering、pghot 与 memcg 讨论综述。
- Compute Express Link Consortium:CXL 规范与内存扩展资料。