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合入
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的并发实现