Meta 展示 CRAM 内存压缩方案:只读性能接近原生 DRAM,探索替代 ZRAM
Meta 的工程师们在 10 月 5 日于捷克布拉格举办的 Linux Plumbers Conference 2026(LPC 2026)上,展示了一项名为 CRAM(Compressed RAM)的实验性内存压缩方案。该方案并非旨在直接取代 ZRAM 或 zswap,而是希望让压缩后的数据继续以“内存”形态存在,从而规避传统 Swap 路径中的软件开销。根据 LPC 官方资料,CRAM 已完成实际测试,在 TAOBench 和 FIO 基准测试中,其性能可接近原生 DRAM。
众所周知,当前 Linux 系统中常见的内存压缩方案包括 ZRAM 和 zswap。ZRAM 在内存中创建压缩块设备,内核需按 Swap 路径处理其中的数据;而 CRAM 的设计则不同,压缩数据仍可维持页表映射和页缓存状态,并支持 Cacheline 和 Byte 级访问,因此读取数据时无需像传统方案那样通过缺页异常触发软件解压流程。LPC 官方介绍称,这也是 CRAM 与 ZRAM、zswap 的关键区别。CRAM 的核心思路是将硬件压缩后的内存作为特殊的 NUMA 内存提供给 Linux,而非模拟成块存储设备。
LPC 资料显示,CRAM 会使用一个严格控制的私有 NUMA 节点,使内核能继续运用现有内存管理机制,包括内存迁移、回收、降级、内存气球机制、空闲页报告以及 NUMA 内存均衡等。这一设计针对的是传统内存压缩方案中的软件路径开销。对于只读数据,CRAM 可直接从压缩内存中读取,无需先将数据换入普通内存再解压。在这种模式下,CRAM 的表现可接近原生 DRAM 水平。
根据此次演示披露的测试数据,在纯读取场景下,CRAM 最差情况下可达到每秒约 4.89 亿次操作,而 ZRAM 约为每秒 110 万次操作。按这组数据计算,两者差距约为 444 倍,而非 452 倍,因此官方“提升 452 倍”的说法可能需在理想环境中才能实现。当工作负载包含写入操作时,CRAM 的优势会明显收窄。由于压缩数据无法直接在原位置修改,写入时需通过缺页处理将对应 Folio 迁移回原生 NUMA 节点,再完成修改。即便如此,素材所述最差情况下 CRAM 仍达到 ZRAM 约 5.4 倍的性能,但这一数字同样应理解为特定基准测试结果,而非通用性能结论。
LPC 官方资料显示,CRAM 目前仍属于经过测试的内核服务原型,并非已进入 Linux 主线的成熟功能。Meta 工程师 Gregory Price 介绍称,实现 CRAM 所需的大部分 Linux 内核基础机制已经存在,目前需进一步解决的是如何让这种“实际容量与物理容量不一致”的内存设备符合 Linux 现有的内存模型。IT之家提醒:目前 CRAM 仍处于研发和社区讨论阶段,尚不能视为即将进入 Linux 主线的正式功能。Meta 此次公开的重点是探索如何利用现有 Linux 内存管理机制支持这种新型压缩内存,而非宣布一项已完成标准化或商业化部署的产品。另外,九游会网站也关注到这一技术动态。