Zstandard v1.5.7 发布:性能全面提升的压缩算法升级
zstd Zstandard - Fast real-time compression algorithm 项目地址: https://gitcode.com/gh_mirrors/zs/zstd
Zstandard(简称zstd)是Facebook开发的一款高性能实时压缩算法,以其出色的压缩比和极快的压缩/解压速度著称。它广泛应用于数据库系统、文件存储、网络传输等场景,被集成到Linux内核、RocksDB等众多知名项目中。
核心性能提升
小数据块压缩速度显著提升
v1.5.7版本针对小数据块(4KB-128KB)的压缩性能进行了重点优化。在快速压缩级别下,压缩速度提升了10%-20%。这对于数据库系统(如RocksDB)特别有价值,因为这些系统通常将数据划分为16KB左右的小块以提高随机访问性能。
测试数据显示,在Silesia语料库上,16KB数据块的压缩速度从360MB/s提升到396MB/s,32KB数据块更是从383MB/s跃升至458MB/s,提升幅度达20%。这种改进同样部分适用于字典压缩场景,提升幅度在0-15%之间。
差分压缩功能大幅增强
--patch-from
功能(类似于bsdiff的差异压缩)在高压缩级别(18+)下获得了显著的速度提升。例如,在6线程环境下压缩linux-6.13.tar相对于linux-6.12.tar的差异时:
- 级别18:从210秒降至42.7秒(4.9倍提升)
- 级别21:从365秒降至120秒(3.1倍提升)
同时,压缩比也有明显改善,级别18的压缩比提升了10%,级别19提升了12.6%。新增的--max
命令更是将压缩比推向极致,虽然需要更多时间和内存资源。
大文件压缩比普遍提升
通过改进块边界选择算法,所有压缩级别的压缩比都有所提升,特别是在低级别(≤15)更为明显。例如:
- 级别1:压缩体积减少199KB
- 级别12:减少257KB
- 级别22:减少36KB
重要功能更新
默认启用多线程
考虑到现代多核CPU的普及,zstd现在默认使用多线程压缩。系统会根据CPU核心数自动选择线程数(最多4个),既利用多核优势,又避免过度占用资源。用户仍可通过命令行或环境变量手动设置线程数。
新增--max
压缩模式
这一新模式通过启用所有优化参数来最大化压缩比,适合对压缩率有极致要求的场景。测试显示,在压缩1GB的enwik9文件时,--max
比--ultra -22
多压缩11MB,但耗时从6分钟增加到72分钟,内存占用从3GB增加到18GB。
关键修复与改进
32位模式压缩错误修复
修复了一个罕见的32位模式下的压缩错误,该错误在长时间使用同一个压缩上下文时可能发生。虽然触发条件苛刻,但在大规模使用场景下已被观察到。因此,32位用户强烈建议升级。
其他重要改进
- Windows平台性能提升
- 更好的BMI2指令集检测(现支持32位x86)
- 新增
ZSTD_compressSequencesAndLiterals()
API - 改进的构建系统支持(CMake、Meson、VS2022等)
- 增强的平台兼容性(QNX、FreeBSD、Hurd等)
技术实现亮点
本次更新的性能提升主要来自:
- 对小数据块压缩路径的优化,减少了分支预测失败和缓存未命中
- 差分压缩中改进了匹配查找算法,避免冗余计算
- 更智能的块边界选择策略,平衡了压缩比和处理速度
- 多线程任务调度优化,减少同步开销
这些改进使得zstd在各种场景下都能提供更好的性能表现,无论是处理小数据块的数据库系统,还是需要高压缩比的大文件存储场景。
对于开发者而言,v1.5.7不仅带来了性能提升,还通过新增API和构建系统改进降低了集成难度。对于终端用户,多线程默认启用和更快的压缩速度将直接改善使用体验。
作为当前最活跃的压缩算法项目之一,zstd持续证明其在性能与功能上的领先地位,v1.5.7版本的发布进一步巩固了这一优势。
zstd Zstandard - Fast real-time compression algorithm 项目地址: https://gitcode.com/gh_mirrors/zs/zstd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考