周三下午,一个名为 misa77 的项目悄然出现在 Hacker News 的 Show 版块。发布者贴出了一组让人眼前一亮的数字:解压速度是 LZ4 的两倍,同时压缩率还更好一点。但紧接着的说明又泼了盆冷水——压缩过程慢得令人发指。这究竟是一个实用工具,还是又一个“为解压而生”的实验品?

misa77 是一款基于 LZ 算法的编解码器,专门瞄准“一次写入、多次读取”的场景。它的设计目标非常明确,甚至有点偏执:极致单线程解压吞吐量、过得去的压缩率,以及不随输入大小变化的恒定内存占用(压缩时不超过 5 MB,解压时甚至为 0 MB)。为了达成这三个目标,压缩速度被毫不犹豫地牺牲了。发布者用“缓慢压缩是显而易见的代价”来形容这一点,语气里没有半分掩饰。

打开网易新闻 查看精彩图片

从已公布的数据来看,misa77 的解压性能有几个反直觉的特点:

第一,对于高可压缩性的文件,解压吞吐量尤其突出。也就是说,数据本身越容易压缩,misa77 解压起来反而越快。这和通常“压缩越狠解压越慢”的认知正好拧着来。

第二,即便是中等可压缩性的文件,只要在压缩时多花些时间,得到的压缩流不仅更小,解压速度也会更快。这相当于把计算成本从解压端彻底移到了压缩端,并且两者还能形成正向叠加:比率提升的同时,吞吐量不降反升。

这种特性催生了一些实验性压缩模式,这些模式会在压缩阶段投入更多计算资源,生成对大多数 CPU 微架构更友好的压缩流,从而在解压时跑出更好的成绩。相关代码存放于仓库的 src/experimental/ 目录下。

打开网易新闻 查看精彩图片

v0.2.0 版本提供两个压缩级别。级别 0 进一步提升解压吞吐量,但压缩率稍差,编码速度与级别 1 相近。级别 1 是默认模式,牺牲一点解压速度换来更好的压缩率,编码速度几乎不变。选择哪个级别,完全取决于你的场景是读密集型,还是对存储成本更敏感。

基准测试结果更直接。在对 Silesia Corpus 的测试中,misa77 的解压吞吐量与压缩率之间的帕累托前沿几乎由它自己独享。多数竞争对手即便拥有明显更差的压缩率,解压速度也追不上它。唯一的短板毫无争议:压缩速度垫底。在 Intel i7-14650HX 处理器、单线程绑定性能核、禁用睿频、CPU 调度策略设为 performance 的环境下,misa77 的表现被逐文件拆解,数据波动极大。有的文件上它一骑绝尘,有的文件上优势收窄,但始终没掉出第一梯队。

容器格式细节和库函数所用的流格式文档已放在 docs/ 目录,感兴趣的人可以直接查阅。至于 v0.1.0 时代横跨 Intel x86-64、AMD x86-64 和 ARM64 的跨平台结果,发布者委婉地提醒了一句“你读到的时候可能已经过时了”。

misa77 的出现,像是给“写一次读多次”场景递了一把极端的工具。如果你的工作负载是日志归档、容器镜像分发、或任何解压远多于压缩的业务,那么用几个小时的压缩时间换来后续每一次毫秒级的解压提速,这笔账或许算得过来。但要是需要频繁压缩,那还是离它远点比较好。