这些简单的脚本对 Pigz 并行压缩器的不同 zlib 压缩库进行了基准测试。并行压缩可以使用现代计算机可用的多个内核来快速压缩数据。该技术可以与 CloudFlare zlib 结合使用,后者利用现代硬件的其他功能来加速压缩。在这里,我修改了脚本来评估 NIfTI 格式大脑图像的 .gz 压缩。 AFNI 和 FSL 等工具通常使用 gzip 压缩(.nii.gz 文件)保存 NIfTI 图像。现代 MRI 方法(例如多波段)会产生巨大的数据集,因此需要花费大量时间来压缩这些图像。
下图显示了 Pigz 与默认单线程 Pigz 的性能,因此“1”表示性能相当。显示 3 个压缩级别的性能:快速(3,基线 35 秒)、默认(6、50 秒)和慢速(9、183 秒)。横轴显示用于压缩的线程数。在较低的压缩级别 (1) 下,所有工具都相对较快,从磁盘读取和写入是速率限制因素。在更高的压缩级别下,多线程和 CloudFlare 增强功能的组合相对于默认 gzip 显着提高了性能。测试系统为24核(48线程)Intel Xeon Platinum 8260:
下图显示了每个工具在 4 核(8 线程)计算机上使用其首选线程数来压缩流行的西里西亚语料库。 Pigz 的所有版本都优于系统的单线程 gzip。可以看出,现代 zstd 格式主导了较旧且更简单的 gzip。 gzip 已在许多领域得到广泛采用(例如,在脑成像中,它用于 NIfTI、NRRD 和 AFNI)。 gzip 格式的简单性意味着开发人员可以轻松地在他们的工具中包含支持。因此,gzip 在社区中占有重要地位。然而,专为现代硬件设计并利用新技术的现代格式具有固有的优势。
脚本5decompress.sh
允许我们比较解压速度。解压比压缩快。然而,gzip 解压缩不能利用多线程,并且通常比现代压缩格式慢。在此测试中,所有 gz 工具都会解压缩该数据。相比之下,bzip2 和 ztd 正在解压缩已压缩为较小大小的数据。每秒兆字节数是根据解压缩的大小计算的。通常,更紧凑的压缩需要使用更复杂的算法,因此格式之间的比较具有挑战性。无论如何,在 gz 工具中,zlib-ng 表现出了优越的解压性能:
速度(兆/秒) | Pigz-CF | 猪猪 | Pigz系统 | 压缩包 | 压缩包2 | 压缩包2 |
---|---|---|---|---|---|---|
减压 | 278 | 300 | 274 | 244 | 122 | 236 |
使用如下命令运行基准测试:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
将使用不同的 zlib 变体(system、CloudFlare、ng)下载并构建 Pigz 的副本。它还下载样本图像来测试压缩,特别是复制到文件夹corpus
样本 MRI 扫描。您必须先运行此脚本一次,然后再运行其他脚本。所有其他脚本都可以彼此独立运行。2test.sh
比较不同版本pigz以及系统单线程gzip的速度。您可以将corpus
文件夹中的文件替换为更能代表您的数据集的文件。3slowtest.sh
下载西里西亚语料库并测试压缩速度。该语料库很受欢迎:基准1、基准2、基准3。4verify.sh
测试了每种方法的压缩和解压,确保它们能够无损地存储数据。5decompress.sh
评估解压速度。一般来说,gzip 格式压缩速度慢,但解压缩速度快(特别是与同时开发的格式相比)。然而,gzip 解压缩相对于现代 zstd 来说很慢。此外,虽然 gzip 压缩可以从并行处理中受益,但解压缩却不能。该脚本的一个重要特征是 zlib 的每个变体都向测试语料库贡献压缩文件,然后在这个完整语料库上测试每个工具。这可以确保我们比较类似的任务,因为某些 zlib 压缩方法可能会生成较小的文件,但代价是创建解压速度较慢的文件。6speed_size.sh
比较了 Pigz 与 gzip、zstd 和 bzip2 的不同变体,以压缩西里西亚语料库。每个工具都在不同的压缩级别进行测试,但始终使用首选的线程数。 blocksize
。该存储库包含用于评估该工具的test_mgzip.py
脚本。