LZ4:极速压缩算法
本文目录
LZ4 是一种无损压缩算法,单核压缩速度超过 500 MB/s,并可随多核 CPU 扩展。它配备极快的解码器,单核速度可达数 GB/s,在多核系统上通常能达到内存带宽的极限。
压缩速度可以动态调节,通过选择「加速」(acceleration)因子,以压缩率换取更快的速度。另一方面,它还提供高压缩衍生版本 LZ4_HC,以 CPU 时间换取更好的压缩率。所有版本的解压速度相同。
LZ4 也兼容字典压缩(dictionary compression),在 API 和命令行(-D)层面均可使用。它可以接收任意输入文件作为字典,但只使用最后 64 KB。该能力可与 Zstandard 字典构建器(Zstandard Dictionary Builder)结合使用,以大幅提升小文件的压缩性能。
LZ4 库以 BSD 2-Clause 许可作为开源软件提供。lz4 命令行工具采用 GPL-2.0-or-later 许可。
基准测试#
该基准使用 @inikep 的 lzbench v2.4.1,在 Linux 64 位(Ubuntu 24.04)上用 GCC v13.3.0 编译。参考系统使用 Core i7-9700K CPU。基准在单线程模式下评估对参考 Silesia 语料库的压缩。
| 压缩器 | 压缩倍数 | 压缩速度 | 解压速度 |
|---|---|---|---|
| memcpy | 1.000 | 13700 MB/s | 13700 MB/s |
| LZ4 default (v1.11.0) | 2.112 | 770 MB/s | 4950 MB/s |
| LZO 2.10 -1 | 2.108 | 660 MB/s | 800 MB/s |
| QuickLZ 1.5.1b7 -1 | 2.238 | 580 MB/s | 780 MB/s |
| Snappy 1.3.1 | 2.090 | 520 MB/s | 1350 MB/s |
| Zstandard 1.5.7 -1 | 2.896 | 510 MB/s | 1570 MB/s |
| LZF v3.6 | 2.073 | 375 MB/s | 920 MB/s |
| zlib-ng 2.3.3 -1 | 2.252 | 250 MB/s | 555 MB/s |
| zlib deflate 1.3.2 -1 | 2.743 | 110 MB/s | 410 MB/s |
| LZ4 HC -9 (v1.11.0) | 2.717 | 40 MB/s | 4800 MB/s |
| zlib deflate 1.3.2 -6 | 3.106 | 36 MB/s | 430 MB/s |
安装#
make
make install # this command may require root permissions
LZ4 的 Makefile 支持标准 Makefile 约定,包括分阶段安装、重定向和命令重定义。它兼容并行构建(-j#)。
其他构建系统(CMake、Meson、Visual Studio)位于 build/ 目录。
使用 vcpkg 构建 LZ4#
你可以使用 vcpkg 依赖管理器下载并安装 LZ4:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install lz4
vcpkg 中的 LZ4 移植包由 Microsoft 团队成员和社区贡献者保持更新。如果版本过旧,请在 vcpkg 仓库中创建 issue 或 pull request。
文档#
原始 LZ4 块压缩格式详见 lz4_Block_format。
任意长度的文件或数据流会为满足流式需求而使用多个块进行压缩。这些块被组织成一个帧(frame),定义见 lz4_Frame_format。可互操作的 LZ4 版本也必须遵循帧格式。
库 API 在其头文件中说明:lz4.h(块 API)、lz4hc.h(高压缩)和 lz4frame.h(帧 API)。
其他源码版本#
除 C 参考实现外,许多贡献者在多种语言(Java、C#、Python、Perl、Ruby 等)中创建了 lz4 版本。已知源码移植版的列表维护在 LZ4 主页上。
打包状态#
大多数发行版都捆绑了包管理器,可轻松安装 liblz4 库和 lz4 命令行界面。
特别感谢#
Takayuki Matsuoka(即 @t-mat),感谢他在本项目整个生命周期中提供了卓越的一流支持。
关于#
极速压缩算法
www.lz4.org
主题:c、compression、lz4