在布拉格举行的 Linux Plumbers 开发者大会上,Meta 工程团队介绍了一套名为 CRAM(压缩内存)的新架构。它的目标很直接:让被压缩的数据用起来更快。官方给出的数据是,在纯读取场景下,CRAM 的吞吐相较目前主流的 ZRAM 提升了 452 倍,实际速度已经非常接近原生 DRAM。

现有的 Linux 系统通常靠 ZRAM 与 zswap 来“膨胀”内存容量,两者都建立在 Swap 交换层之上。要读一个压缩页,就得先产生分页错误中断,再从虚拟块设备里取数据解压,这条软件路径本身就是性能瓶颈。
参与该项目的 Gregory Price 认为,在当下的处理器上,压缩与解压本身几乎不耗时,真正拖后腿的是分页错误处理与 Swap 机制带来的软件开销。
CRAM 的思路是把压缩后的数据完整留在物理内存里,并把它直接纳入内存管理体系,彻底抛开块设备抽象。它基于内核原生机制,构建出一个专用的私有 NUMA 节点,行为上更像一个虚拟化的影子计算单元。这样一来,内核不必把它当成存储设备,便能直接复用现有的内存管理功能,比如页迁移、内存气球化等。
访问粒度上,CRAM 可以精确到缓存行甚至字节级。基准测试里,纯读取负载下的最低性能为每秒 4.89 亿次操作,而同期 ZRAM 只有每秒 110 万次,差距正好是 452 倍。即便把写入负载提高到 20%——此时压缩页无法原地覆写,需要通过分页错误把数据回迁到原本的 NUMA 节点——CRAM 仍能保持 ZRAM 五点四倍的效率。
把压缩数据留在内存并纳入统一管理,思路并不复杂,难的是在不牺牲兼容性的前提下拿到数量级的提升。对内存吃紧的服务器和大规模容器场景而言,这种既省内存、读取又不明显拖慢的方案,一旦进入内核主线,带来的收益会直接体现在单机可承载的负载上。
文章与图片内容转载网络,如有侵权请联系平台删除

发表评论 取消回复