在当下内存短缺、内存价格高企、而内存容量需求又不断攀升的背景下,Meta 的工程师一直在为 Linux 研发压缩内存(Compressed RAM,简称「CRAM」)。这种由硬件卸载(hardware-offloaded)的压缩方式,仍然允许以缓存行(cacheline)/字节的粒度访问被压缩的内存,因此实现方式优于 ZRAM 和 Zswap 之类的方案。尤其值得期待的是,CRAM 的性能已接近原生 DRAM 的速度。
10 月 5 日,Meta 工程师格雷戈里·普赖斯(Gregory Price)在布拉格举行的 Linux Plumbers Conference(LPC 2026)上介绍了这项 Linux 压缩内存工作。支撑 CRAM 所需的多数组件已经进入主线内核。对已经在用 Zswap 或 ZRAM 的用户,CRAM 可以提供接近原生 DRAM 的速度。
在读取方面,只读数据的速度与原生 DRAM 相当。
而在内存写入方面,CRAM 比 ZRAM、Zswap 或普通 swap 都快得多。
考虑到当今 Linux 对最大化内存容量的迫切需求,CRAM 取得的这些结果令人印象非常深刻。
只读测试中,匿名页占用 46 GB,写入比例为 0;各方案可用物理内存都是 36 GB,虚线标出的 DRAM 上限对应 54 GB。偏斜访问(Zipf 0.99)下,DRAM 上限为每秒 3.25 亿次操作,CRAM 为 3.21 亿次,ZRAM(zstd)约 970 万次,磁盘交换约 310 万次,Zswap(zstd)约 32 万次。均匀随机访问(最差情况)下,DRAM 上限 4.98 亿次,CRAM 4.89 亿次,ZRAM 约 110 万次,磁盘交换约 36 万次,Zswap 约 4.3 万次。横轴为对数坐标。各档都放在 DRAM 上,以便单独观察缺页开销。Zswap 还遇到与方案本身无关的回收停顿,相关柱状结果并不完全可靠。
![]()
图 1:只读数据场景下,CRAM 速度与 DRAM 相当。
加入写入后,CRAM 仍明显快于 ZRAM、Zswap 和普通磁盘交换。可用物理内存同样是 36 GB。写入 CRAM 会触发缺页并把该页拷回 DRAM,读取不会缺页。
CRAM支持完整的Cacheline与Byte级访问,基准测试中,纯读取模式下最差情况可达每秒4.89亿次操作,而ZRAM仅为每秒110万次操作,领先452倍。
即使加入20%写入负载,由于压缩数据无法直接原位覆写,必须通过分页错误将Folio移回原生NUMA节点,但该最差情境下CRAM速度仍为ZRAM的5.4倍。
![]()
图 2:加入写入后,CRAM 相对 ZRAM 仍有约 5~37 倍优势。
普赖斯强调,不能只把 CRAM 做成交换分区,仅仅把压缩交给硬件没有意义。他还列出写控制(先只读,写入时再把页面提升回来)、分配控制(用量可能超过真实容量)、用内存气球做动态扩缩、使用普通 folio 而不是 ZONE_DEVICE,以及如何记账、如何进入内存不足(OOM)处理。他表示,内核已经能满足其中大部分。
![]()
图 3:CRAM 所需机制 内核已能满足其中大部分
当前提高 Linux 可用内存容量的需求很突出。这项工作后续如何推进仍待观察,相关代码希望在不太远的将来全部合入上游。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.