z3fold

z3fold 是一个用于存储压缩页的专用分配器。它被设计为每个物理页存储最多三个压缩页。它是 zbud 的派生版本,可以在保持其前辈的简单性和确定性的前提下,实现更高的压缩率。

z3fold 和 zbud 的主要区别在于

  • 与 zbud 不同,z3fold 允许高达 PAGE_SIZE 的分配

  • z3fold 可以在其页面中容纳最多 3 个压缩页

  • z3fold 本身不导出任何 API,因此旨在通过 zpool API 使用。

为了保持确定性和简单性,z3fold,就像 zbud 一样,总是每个页面存储整数个压缩页,但它可以存储最多 3 个页面,而 zbud 最多可以存储 2 个。因此,压缩率达到 2.7 倍左右,而 zbud 的压缩率约为 1.7 倍。

与 zbud 不同(但与 zsmalloc 类似),z3fold_alloc() 不返回可解引用的指针。相反,它返回一个无符号长句柄,该句柄编码了已分配对象的实际位置。

在保持有效压缩率接近 zsmalloc 的同时,z3fold 不依赖于启用的 MMU,并提供更可预测的回收行为,这使其更适合小型和响应关键型系统。