论文解读:Nomad: Non-Exclusive Memory Tiering viaTransactional Page Migration

论文要解决的核心问题:传统分层内存管理在面对新型硬件时的局限性

这篇论文关注的核心问题是:在现代计算机系统中使用新型内存设备(如CXL内存、持久内存)构建分层内存系统时,操作系统中现有的页面管理策略(特别是页迁移)效率低下,导致性能瓶颈,尤其是在快速内存资源受限的情况下。

具体来说,问题可以分解为以下几个方面:

  1. 内存硬件演进与性能差距缩小:

    • 背景: 随着CXL内存、持久内存(PM)等字节可寻址(byte-addressable)内存设备的出现,未来的计算机系统将普遍拥有多层内存,每层具有不同的速度、容量、功耗和成本特性。
    • 新挑战: 与过去DRAM和磁盘之间巨大的性能差距(2-3个数量级)不同,新型内存(如CXL内存和PM)与DRAM的性能差距大大缩小(通常在2-3倍以内)。这意味着传统操作系统中指导页管理设计的"巨大性能差距"假设不再成立。如果页迁移的开销过高,将热页提升到高性能层可能反而得不偿失。
  2. 独占式内存分层的固有缺陷(Exclusive Memory Tiering):

    • 传统策略: 目前主流的分层内存管理(包括Linux中的TPP等)都采用"独占式"策略。这意味着一个数据页在任何时刻都只能存在于一个内存层:要么在快速内存(如DRAM),要么在慢速内存(如CXL内存/PM),不能同时存在。
    • 问题所在:
      • 内存压力下的性能下降: 当应用程序的工作集大小(WSS)超过快速内存的容量时,为了保持热数据在快速内存中,系统不得不频繁地在快速内存和慢速内存之间来回迁移(提升和降级)页面。这种频繁的数据移动导致**"内存颠簸"(memory thrashing)**,应用程序性能急剧下降,甚至比不进行任何迁移直接访问慢速内存还要差(如图1所示)。
      • 数据冗余: 独占式策略虽然避免了数据冗余,但牺牲了性能稳定性。
  3. 现有页迁移机制的效率低下:

    • 同步与阻塞: 操作系统中的页迁移是一个复杂且开销大的过程,通常包括解映射(unmap)、复制(copy)和重映射(remap)三个步骤。在迁移过程中,被迁移的页无法被用户程序访问。尤其是"同步页迁移"(synchronous migration),它会阻塞用户程序的执行,直到迁移完成,严重拖慢关键路径。例如,TPP在发现热页时会同步地进行页提升,导致大量的小页错误(minor page faults)和CPU时间消耗(如图2所示)。
    • TLB Shootdown开销: 页表更新后,需要向所有可能缓存了旧页表项的CPU发送进程间中断(IPI),执行TLB shootdown来清除旧的TLB条目,这在多核系统中开销巨大。
    • 追踪开销与准确性: 识别"热页"和"冷页"需要内存访问追踪。现有的软件追踪(如扫描页表、基于页错误)可能开销高或准确性不足;硬件辅助追踪(如PEBS)虽然开销低,但可能面临采样率与准确性的权衡,且可能无法准确识别所有热页(例如,频繁命中缓存的页)。

综上所述,论文认为,在新型分层内存的背景下,简单地沿用或优化现有的独占式、同步页迁移策略已经无法满足性能需求,需要一种根本性的改变。


论文提出的创新点:NOMAD框架及其核心机制

为了解决上述问题,论文提出了 NOMAD (Non-Exclusive Memory Tiering via Transactional Page Migration) 框架,其核心创新点在于:

  1. 非独占式内存分层(Non-Exclusive Memory Tiering):

    • 核心思想: 放弃了传统独占式策略,允许一部分从慢速内存提升到快速内存的页,在慢速内存中保留一个"影子副本"(shadow copy)。这意味着在某些情况下,一个数据页可以同时存在于快慢两个内存层中。
    • 具体实现与优势:
      • 缓解内存颠簸: 当快速内存面临压力需要降级页时,如果该页在快速内存中的副本是干净的(未被修改),并且其在慢速内存中的影子副本存在,那么降级操作可以极大地简化。系统不再需要将数据从快速内存复制回慢速内存,而只需简单地通过修改页表来"重映射"到慢速内存中的影子副本。这大大降低了降级开销,使系统在内存压力下能更平滑地过渡性能,避免了昂贵的双向数据移动。
      • "单向页影子": NOMAD的页影子是"单向"的,只针对从慢速内存提升到快速内存的页保留影子副本。这与完全的"包含式缓存"(Inclusive Caching)不同,后者通常将所有数据都视作慢速内存的缓存,并且可能导致更大的容量开销。
      • 影子页管理: NOMAD引入了XArray数据结构来索引影子页,并使用一个特殊的"影子读写位"(shadow r/w bit)来追踪快速内存中主页的修改情况。如果主页被修改,其影子副本会被标记为不一致并最终丢弃,以避免数据不一致问题。
      • 影子页回收: 为了避免因影子页占用过多内存而导致的OOM问题,NOMAD指示kswapd(Linux的内存回收守护进程)优先回收影子页,并在内存分配失败时主动释放影子页。
  2. 事务性页迁移(Transactional Page Migration, TPM):

    • 核心思想: 将页内容复制过程与页的可用性解耦,使得页在大部分迁移过程中仍然可以被用户程序访问,从而将页迁移从关键路径中移除,使其成为异步操作。
    • 具体实现与优势(如图3所示):
      • 无阻塞复制: 与传统迁移先解映射后复制不同,TPM在开始复制页内容时,并不立即解映射页。它会清除页的脏位,并向所有CPU发送TLB shootdown,确保后续的写入可以被追踪。在此期间,用户程序仍然可以从慢速内存中访问该页。
      • 事务性保证: 复制完成后,TPM会检查页的脏位。如果页在复制期间被用户程序修改(即脏位被设置),则本次迁移(事务)被视为失败并中止,复制的页内容被丢弃,待稍后重试。如果页是干净的,则在锁定该页并进行一次TLB shootdown后,将其在页表中重映射到快速内存的新地址,完成迁移。
      • 最小化不可访问时间: 页真正不可访问的时间窗口被极大地缩短,仅限于页表项更新和TLB shootdown的那一小段时间,而非整个数据复制过程。
      • 异步特性: TPM可以在后台由内核线程kpromote异步执行,与用户程序并行,大大降低了对用户程序性能的影响。
      • 优化与Linux内存追踪的结合(如图4所示): TPM通过维护一个"提升候选队列"(PCQ),并与Linux现有的LRU列表管理结合,力求在减少页错误数量(在理想情况下每个页迁移只需一个页错误)的同时,有效地启动页迁移。

总结来说:

  • 解决的问题: 传统独占式、同步的页迁移机制在新型分层内存系统中效率低下,尤其是在快速内存不足时导致严重的内存颠簸和性能下降。
  • 创新点:
    1. 非独占式内存分层: 允许在慢速内存中保留热页的影子副本,极大地降低了内存压力下页降级的开销,提高了系统在面对内存压力时的鲁棒性和性能稳定性。
    2. 事务性页迁移: 通过异步、无阻塞的页内容复制和事务性提交机制,将页迁移从用户程序的关键路径中移除,显著减少了迁移对应用程序性能的冲击。

NOMAD通过这些创新点,旨在为分层内存系统提供一个更高效、更稳定的页管理框架,从而更好地利用不同内存层的特性,提升整体系统性能。

相关推荐
UWA7 小时前
GPM 2.0全新功能发布|GPU精准监测 + 精细化运营,重构游戏性能管控新范式
人工智能·游戏·性能优化·重构·游戏开发·uwa
DemonAvenger8 小时前
Redis Lua脚本编程:提升原子性操作与性能的秘密武器
数据库·redis·性能优化
Robot侠10 小时前
ROS1从入门到精通 20:性能优化与最佳实践
图像处理·人工智能·计算机视觉·性能优化·机器人·ros
·云扬·10 小时前
MySQL大批量数据导入性能优化:从原理到实践
数据库·mysql·性能优化
LYFlied11 小时前
前端性能优化常见面试问题汇总
前端·面试·性能优化
jump_jump21 小时前
手写一个 Askama 模板压缩工具
前端·性能优化·rust
墨者阳1 天前
数据库的自我修炼
数据库·sql·缓存·性能优化
摘星编程1 天前
CANN内存管理机制:从分配策略到性能优化
人工智能·华为·性能优化
Sthenia1 天前
如何用 Chrome DevTools 定位 Long Task:一份从零到实战的排查笔记
前端·性能优化