2025-08-14
数据处理
0

目录

测试平台
isa-l算法
Pigz算法
结果分析
补充分卷压缩指令

在日常的开发和运维工作中,我们经常需要传输大量文件。当传输单个大文件时,网络带宽通常能被充分利用,速度令人满意。然而,一旦面对成千上万个小文件,传输速度便会急剧下降,令人抓狂。这背后的原因在于,每次文件传输都伴随着网络连接建立、元数据读写等额外开销。对于小文件而言,这些固定开销所占比例远超实际数据传输的时间. 本文参考美团技术团队的博客:https://tech.meituan.com/2021/01/07/pack-gzip-zstd-lz4.html 选择isa-l算法和Pigz算法进行测试。

测试平台

使用macbook air m4 16g内存,4+4 核心,单核频率最大4.5GHz

isa-l算法

ISA-L 是一套在 IA 架构上加速算法执行的开源函数库,目的在于解决存储系统的计算需求。 ISA-L 使用的是 BSD-3-Clause License ,因此在商业上同样可以使用。

使用过 SPDK(Storage Performance Development Kit )或者 DPDK(Data Plane Development Kit)应该也听说过 ISA-L ,前者使用了 ISA-L 的 CRC 部分,后者使用了它的压缩优化。ISA-L 通过使用高效的 SIMD (Single Instruction, Multiple Data)指令和专用指令,最大化的利用 CPU 的微架构来加速存储算法的计算过程。ISA-L底层函数都是使用手工汇编代码编写,并在很多细节上做了调优(现在经常要考虑 ARM 平台,本文中所提及的部分指令在该平台支持度不高甚至是不支持)。

首先安装

brew install isa-l

测试压缩:

time tar cf - ./海事事故数据 | igzip > demo.tar.gz

这个文件夹大约7.95G,大量的小型pdf文件,测试结果:

tar cf - ./海事事故数据 0.18s user 1.53s system 3% cpu 51.342 total igzip > demo.tar.gz 41.62s user 1.26s system 83% cpu 51.343 total

测试解压:

time igzip -dc demo.tar.gz | tar xf -

测试结果:

igzip -dc demo.tar.gz 15.86s user 1.53s system 82% cpu 20.961 total tar xf - 0.26s user 4.06s system 20% cpu 20.962 total

Pigz算法

测试压缩:

time tar -cf - ./海事事故数据 | pigz > demo.tar.gz

测试结果:

tar -cf - ./海事事故数据 0.31s user 2.85s system 11% cpu 28.507 total pigz > demo.tar.gz 163.13s user 6.14s system 593% cpu 28.508 total

解压测试:

time pigz -dc demo.tar.gz | tar -xf -

测试结果:

pigz -dc demo.tar.gz 9.26s user 3.81s system 117% cpu 11.169 total tar -xf - 0.33s user 4.56s system 43% cpu 11.175 total

结果分析

可以看到Pigz算法在压缩速度上优势比较明显,因为是并行的,如果是服务器100多核心的,可能优势更大。不过占用资源也是真的。一般来讲,服务器不需要跑什么服务,或者不是用在生产环节,使用Pigz能够更加节约时间。 ⚠️:一定不要在U盘下进行压缩操作,U盘的读写速度非常差,并且很多文件格式只支持最大4G!!!

补充分卷压缩指令

压缩大文件,每个分卷3G

tar -cf - large_project | pigz | split -b 3G - large_project_archive.tar.gz.

解压分卷

cat /path/to/archive.tar.gz.* | pigz -dc | tar -xf -

本文作者:James

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!