编辑
2025-11-01
记录知识
0
请注意,本文编写于 190 天前,最后修改于 190 天前,其中某些信息可能已经过时。

zram的算法种类 LZ77 LZO LZ4 LZ4HC LZO-RLE 842 deflate zstd

压缩的任务是找出重复的字符。 关于LZ算法 分区--找匹配---编码---滑动窗口

lz4 匹配优化hash 编码优化,顺序访问,字节对齐 压缩率有牺牲,压缩速度快 lz4hc 匹配更深入 压缩速度慢 lzo hash,变长编码 压缩率好 lzo-rle 连续重复字节优化
deflate 常用于gzip zstd 天生多线程 可加速

lz4m:基于lz4的内存数据压缩优化, 压缩速度提高,但是压缩率减少

lz4 benchmark: zram-perf

使用zram-perf测试,不是用户数据,没办法模拟用户场景

构造zram-dump来进行效率评估

使用zram-dump下的测试数据: lz4m 速度快,压缩率劣化

压缩算法优劣: 压缩率:可用内存 压缩速度:slowpath/kswapd 解压速度: page fault 不卡

腾内存的速度,单位时间腾内存的速度,lz4m腾内存速度最快

zram_multi_comp:可以支持zram使用多种不同的压缩算法,取长补短 6.2合入

  1. 配置

zram结构体从1个变成4个,1个主压缩算法,3个次压缩算法

目标:让zram重新压缩指定数据,减少zmalloc使用量,关注在压缩率上 遍历zram slot,根据echo的算法,先对slot解压,在按顺序用新算法压缩,直到新的数据大小比原数据小,则更新zram slot

也就是通过配置来实现重压缩

问题是:速度太慢,不可接受,压缩算法仅考虑了压缩率,不考虑压缩速度。不够完善

目标是:重载情况下,腾内存更快。

配置:将lz4作为主压缩算法,lz4m作为第二压缩算法 场景关联:kswapd和绝大部分slowpath,则lz4。 前台进程 lz4m,更快腾出内存

新增精准重压,增加线程,闲时主动压缩

展望:zram使用异构方向优化。

是不是按照不同场景来进行压缩

zram异构压缩技术 基于GPU加速的内存回收 lz4执行时间太长,占整个回收过程的30-40%,这是导致重载情况下CPU争抢和体验劣化的关键瓶颈。 社区patch zsmalloc/zram: there be preemption

cuda已经有lz4的并发实现