目的是用闲置的cpu周期来做ram中的压缩和解压缩。
Zram主要是通过Swap框架,把zram压缩池模拟成swap分区。
Key:交换分区的swp_entry_t,mkswapon时会每个swap分区都分配一个index,page_io时会申请空闲的swp_entry_t,同时存储在page结构体private中,方便后续缺页异常找到。
Zswap主要是通过frontswap框架,把匿名页在进入swap分区之前hook了,转移到自定义的压缩池。和Zram最大的区别是一定要有额外的真实的物理swap分区,不然那匿名页回收的时候根本看不到有swap空闲。另一点是Zswap的Hook是在达到swap分区之前实现的,因此会比Zram早接管。
Key:和Zram一样。
Zcache主要是通过Cleancache框架,把clean的文件页回收到压缩池。
当前只支持ext4、f2fs、btrfs文件系统,毕竟一个文件页的唯一性是superblock+inode+offset决定的。
Key: 文件系统+文件+文件偏移
参考:
In-kernel memory compression 翻译:内核内实现的内存压缩 - JciX ~
Documentation\vm\frontswap.rst
Documentation\vm\cleancache.rst
Documentation\vm\zswap.rst