Linux ZRAM 压缩性能暴涨 50%,仅需几十行代码的内核补丁
在 Linux 内核的世界里,有时候一个几十行的小补丁就能带来立竿见影的性能提升。最近,来自荣耀的工程师 Gao Xu 向 Linux 内核邮件列表提交了一个补丁,声称可以让 ZRAM 的 LZ4 字典压缩性能提升超过 50%。
ZRAM 是什么
先简单解释一下背景。ZRAM 是 Linux 内核中一个非常实用的模块,它的作用是在内存中创建压缩的块设备。简单说就是把一部分内存拿出来做"压缩内存盘",内存不够用的时候,系统会先把数据压缩扔进 ZRAM,而不是直接写到慢得多的物理磁盘(swap 分区)上去。
对于内存紧张的服务器或者嵌入式设备来说,ZRAM 几乎是必备功能。安卓手机也大量使用这个技术来缓解内存压力。
问题出在哪
这次优化瞄准的是 ZRAM 使用 LZ4 字典压缩时的一个性能瓶颈。在原来的代码里,每次压缩操作都会重复调用 LZ4_loadDict() 函数,而这个函数内部有一套字典预处理的逻辑。问题是,如果字典没变,每次都跑一遍预处理显然是在做无用功。
Gao Xu 的补丁引入了一个叫做"模板流"(template stream)的机制。核心思路很简单:字典只在初次设置或者修改的时候预处理一次,之后的每次压缩操作直接复制这个已经处理好的状态来用就行了。
补丁描述原文写道:
"在 ZRAM 中反复调用 LZ4_loadDict() 会因其内部的字典预处理而产生显著的性能开销。本提交引入了模板流机制,仅在字典初始化或修改时进行一次预处理,后续压缩操作直接高效复制该状态。该优化在 ZRAM I/O 测试中将 LZ4 字典压缩性能提升了 50% 以上。"
影响面
这个补丁目前已经提交审核。如果合入主线,受益的场景相当广泛:从内存吃紧的 Linux 服务器,到各类嵌入式设备,再到每天数十亿台安卓手机的内存管理。一个几十行的改动能撬动这么大的影响面,也算是内核开发的一个经典案例了。
当然,补丁还在 review 阶段,后续能不能顺利合并、实际场景下的表现是否和测试数据一样好,还需要进一步观察。
信息来源:Phoronix