内存管理-61-内存压缩-1-理论


一、压缩算法

页面可以被压缩,是因为程序内存中存在大量重复字节、对齐填充、文本规律、结构冗余等,这些冗余被压缩算法(如 lz4/zstd)识别并用短编码替代;不可压缩的页是那些字节分布接近随机的页(加密数据、压缩流等),它们在 zram 中会以原始尺寸存储。

以 zram 常用算法为例(lz4/lzo/zstd),原理都是"用短编码代替常见模式":

1. LZ 系(lz4/lzo)

滑动窗口内找重复模式。用"距上次出现的偏移量 + 长度"代替重复数据。纯 0 页面可以压缩到几十字节。

2. Huffman/Entropy 编码(zstd 复合用)

统计字节/符号出现频率。常用的用更短的编码表示。不常用的用更长的编码。

3. 这三个可以按一句话区分:

LZ4:最快,压缩率中等,适合低延迟场景。
LZO:速度也快,压缩率通常略好于/接近 LZ4(实现与版本相关).
Zstd: 一般压缩率最高,但 CPU 开销更大、延迟更高.

压缩率: 一般是 Zstd > LZO ≈ LZ4(具体取决于数据类型), 对高熵数据三者都提升有限.

核心差异:

-----------------------------------------------------------------------------
算法  压缩速度  解压速度  压缩率    CPU开销  典型场景
-----------------------------------------------------------------------------
LZ4   很快      很快      中等      低       实时、低延迟(日志流、内存压缩)
LZO   快        很快      中等偏上  低到中   老平台、兼容性好、低开销
Zstd  中到慢    快到中    高        中到高   存储节省优先、离线压缩、可调档位
-----------------------------------------------------------------------------


二、内存页典型压缩率

1. 压缩率表格

-----------------------------------------------------------
页面类型           典型压缩率
-----------------------------------------------------------
全零页             100:1 以上(几乎可以丢掉)
代码段(.text)      约 3:1 ~ 5:1
普通堆/栈数据      约 2:1 ~ 4:1
JSON/文本缓冲区    约 3:1 ~ 10:1
加密/随机数据      基本不可压缩(<1.05:1)
图像原始帧         约 2:1 ~ 3:1
-----------------------------------------------------------

 

posted on 2026-03-28 12:13  Hello-World3  阅读(2)  评论(0)    收藏  举报

导航