Meta 推出 CRAM 技术:将内存压缩直接集成至 RAM,性能提升高达 452 倍
Meta 工程师格雷戈里·普莱斯(Gregory Price)及其团队提出了一种名为 CRAM 的新型 Linux 内存管理技术。该方案通过将压缩数据直接存储在物理内存中,完全规避了传统的交换机制,在特定场景下实现了比 ZRAM 高 452 倍的性能提升。

长期以来,Linux 系统中利用内存压缩来扩展可用容量的主流方案是 zswap 和 ZRAM。然而,这两种技术本质上仍依赖于交换层功能。CRAM 的核心设计理念在于认识到,内存压缩带来的最大性能损耗并非来自压缩算法本身,而是源于页面故障处理及交换操作。因此,CRAM 尝试在不经过交换路径的情况下,直接在内存中实现类似 ZRAM 的压缩存储效果。
从技术实现上看,CRAM 并未采用模拟块设备的方式,而是利用 Linux 现有的私有 NUMA 节点机制(被描述为一个“幽灵 CPU”)。这种架构允许 Linux 内核继续使用标准的内存语义(如页面迁移和气球化)来管理 CRAM 中的数据,从而保持了与现有内存子系统的高度兼容性。
为了应对内存分配管理的复杂性,CRAM 引入了一个被称为“Chicken Bit”的关键机制。当系统忙于处理内存分配任务时,该标志位会指示 Linux 停止向 CRAM 写入新数据。这一设计旨在防止因数据可压缩性差异导致的资源耗尽问题——毕竟,数据的压缩率取决于内容本身,从零值数据到已压缩数据,其占用空间变化巨大。目前,如何精确计算逻辑 RAM 容量以及在极端情况下的溢出处理仍是尚未完全解决的难题,但“Chicken Bit”至少提供了一种避免级联失败(演示文稿中形象地称为“毒风暴”)的保护手段。
由于 CRAM 数据驻留在 RAM 中并被视为标准内存,它支持完整的缓存行和字节级访问权限。对于只读数据而言,访问速度仅受限于硬件解压缩开销,几乎等同于直接 DRAM 访问速度。测试数据显示,在最坏情况下,CRAM 每秒可执行 4.89 亿次操作,而传统 ZRAM 仅为 110 万次。即便在对数尺度图表上,两者的差距也极为显著。
在涉及写入操作的混合负载场景中,CRAM 依然展现出显著优势,尽管性能提升幅度有所回落。在写入比例为 20% 的最坏测试案例中,CRAM 相比 ZRAM 仍有 5.4 倍的速度优势。虽然这远低于只读场景下的 452 倍提升,但考虑到写入操作需要触发页面故障并将文件迁移回原始 NUMA 域(因为无法直接修改压缩数据),这一性能表现依然可观。
尽管 CRAM 的研发背景主要面向 Meta 的大型 Linux 服务器集群,但其潜在应用范围涵盖了整个 Linux 生态系统。目前,ZRAM 和 Zswap 已被广泛部署于各类发行版中,包括 Steam Deck 等资源受限的设备。随着相关实现问题的逐步解决,业界期待该技术未来能够合并进入 Linux 内核主线。





