Benchmark gzip compression and decompression performance
gzip是很多测序数据的默认压缩格式。在学校HPC环境中,几个GB的文件的压缩和解压缩往往需要几分钟到几十分钟的时间。如果处理的数据较大,gzip的压缩和解压缩会占用不少时间。因此我想看看有没有比Linux默认的gzip更有效率的软件。这里主要比较:
- libdeflate 这是samtools的选择
- igzip 这包含在Intel ISA-L软件中
- pigz 这是gzip的多线程实现
具体的测试分为压缩和解压缩两部分。用的是一个FASTQ文件,压缩后大约2G,原始文件6G。
测试结果如下:
Decompression | ||||
User Time (s) | Real Time (s) | Memory | ||
gzip | 39.73u | 1.47s | 41.24r | 876kB |
igzip | 7.60u | 1.81s | 11.31r | 2844kB |
libdeflate | 20.45u | 6.53s | 28.05r | 7909292kB |
pigz | 30.18u | 4.86s | 23.49r | 1000kB |
Compression | |||||
User Time (s) | Real Time (s) | Memory | Compressed File Size | ||
gzip | 620.17u | 2.54s | 623.23r | 1116kB | 1.81G |
igzip | 15.61u | 1.92s | 17.69r | 2628kB | 2.03G |
libdeflate | 152.88u | 10.29s | 163.43r | 7879072kB | 1.78G |
pigz | 995.38u | 4.15s | 18.18r | 38352kB | 1.82G |
结论: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之间,这里就不再测试了。