比较gzip压缩和解压缩性能

Benchmark gzip compression and decompression performance

gzip是很多测序数据的默认压缩格式。在学校HPC环境中,几个GB的文件的压缩和解压缩往往需要几分钟到几十分钟的时间。如果处理的数据较大,gzip的压缩和解压缩会占用不少时间。因此我想看看有没有比Linux默认的gzip更有效率的软件。这里主要比较:

  1. libdeflate 这是samtools的选择
  2. igzip 这包含在Intel ISA-L软件中
  3. pigz 这是gzip的多线程实现

具体的测试分为压缩和解压缩两部分。用的是一个FASTQ文件,压缩后大约2G,原始文件6G。

测试结果如下:

Decompression
User Time (s)Real Time (s)Memory
gzip39.73u1.47s41.24r876kB
igzip7.60u1.81s11.31r2844kB
libdeflate20.45u6.53s28.05r7909292kB
pigz30.18u4.86s23.49r1000kB
Decompression Benchmark
Compression
User Time (s)Real Time (s)MemoryCompressed File Size
gzip620.17u2.54s623.23r1116kB1.81G
igzip15.61u1.92s17.69r2628kB2.03G
libdeflate152.88u10.29s163.43r7879072kB1.78G
pigz995.38u4.15s18.18r38352kB1.82G
Compression Benchmark

结论:Intel igzip在耗时指标中完胜。在默认设置下,igzip解压缩时间是系统提供gzip的1/5,压缩时间是1/40。唯一不足的是压缩后的文件偏大。

讨论:

这个结果和samtools 的benchmark差别很大。我发现samtools用的GitHub仓库(https://github.com/jtkukunas/zlib)不同于Intel Tuning Guide里提供的仓库(https://github.com/intel/isa-l/blob/master/README.md)。 因此性能的差别可能来源于samtools没有用官方的实现,当然也有可能是测试方法不同:samtools测量的是bam文件的读写速度,而我只是用FASTQ文件作为测试。

其他相关的gzip工具还有zlib-ng 和cloudflare优化的zlib。这些性能应该在igzip和系统自带的gzip之间,这里就不再测试了。