Zstd 1.4.9 发布,long 模式性能提升约 2 倍
Zstd v1.4.9 已发布, 这是一个增量版本,其中包括各种改进和错误修复。zstd (Zstandard) 是由 Facebook 开源的快速无损压缩算法,主要应用于 zlib 级别的实时压缩场景,并且具有更好的压缩比。zstd 还可以以压缩速度为代价提供更强的压缩比,速度与压缩权衡可通过小增量进行配置。
>2x Faster Long Distance Mode
归功于许多优化措施,Long Distance Mode (LDM) 速度出现了大大提升。这些优化在保持压缩率的同时极大地加快压缩时间。用 zstd -T0 -1 --long=31 在 Intel I9-9900K上以 3.2GHz 的速度进行基准测试,可以看到:
| File | v1.4.8 MB/s | v1.4.9 MB/s | Improvement |
|---|---|---|---|
| silesia.tar | 308 | 692 | 125% |
| linux-versions* | 312 | 667 | 114% |
| enwik9 | 294 | 747 | 154% |
* linux-versions 是 linux 4.0、5.0 和 5.10 git archives 的集合。
新的实验性解压功能:ZSTD_d_refMultipleDDicts
如果启用了高级参数 ZSTD_d_refMultipleDDicts,那么对 ZSTD_refDDict() 的多次调用将在相应的 DCtx 中被执行。用法示例:
ZSTD_DCtx* dctx = ZSTD_createDCtx(); ZSTD_DCtx_setParameter(dctx, ZSTD_d_refMultipleDDicts, ZSTD_rmd_refMultipleDDicts); ZSTD_DCtx_refDDict(dctx, ddict1); ZSTD_DCtx_refDDict(dctx, ddict2); ZSTD_DCtx_refDDict(dctx, ddict3); ... ZSTD_decompress...
现在可以通过单个 ZSTD_decompress 调用对每个具有自己的 dictID 的多个帧进行解压缩。只要每个帧头的 dictID 引用 DCtx 中的一个 dictID,那么相应的字典就会被用来解压该特定的帧。值得注意的是,statically-allocated DCtx 禁用了此功能。
更多其他更改可查看:https://github.com/facebook/zstd/releases/tag/v1.4.9