内存管理-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) 收藏 举报
浙公网安备 33010602011771号