Estos scripts simples comparan diferentes bibliotecas de compresión zlib para el compresor paralelo pigz. La compresión paralela puede utilizar varios núcleos disponibles en las computadoras modernas para comprimir datos rápidamente. Esta técnica se puede combinar con CloudFlare zlib, que acelera la compresión utilizando otras características del hardware moderno. Aquí, he adaptado el script para evaluar la compresión .gz de imágenes cerebrales en formato NIfTI. Es común que herramientas como AFNI y FSL guarden imágenes NIfTI usando compresión gzip (archivos .nii.gz). Los métodos modernos de resonancia magnética, como el multibanda, producen enormes conjuntos de datos, por lo que se dedica un tiempo considerable a comprimir estas imágenes.
El siguiente gráfico muestra el rendimiento de pigz frente al pigz predeterminado de un solo subproceso, de modo que '1' indica un rendimiento equivalente. El rendimiento se muestra para 3 niveles de compresión: rápido (3, línea base 35 segundos), predeterminado (6, 50 s) y lento (9, 183 s). El eje horizontal muestra el número de hilos dedicados a la compresión. En niveles de compresión más bajos (1), todas las herramientas son relativamente rápidas, siendo la lectura y escritura desde el disco el factor limitante de la velocidad. En niveles de compresión más altos, la combinación de múltiples subprocesos y las mejoras de CloudFlare aceleran drásticamente el rendimiento en relación con el gzip predeterminado. El sistema de prueba fue un Intel Xeon Platinum 8260 de 24 núcleos (48 subprocesos):
El siguiente gráfico muestra cada herramienta utilizando su número preferido de subprocesos en una computadora de 4 núcleos (8 subprocesos) para comprimir el popular corpus de Silesia. Todas las versiones de pigz superan al gzip de un solo subproceso del sistema. Se puede ver que el formato zstd moderno domina al gzip, más antiguo y simple. gzip se ha adoptado ampliamente en muchos campos (por ejemplo, en imágenes cerebrales se utiliza para NIfTI, NRRD y AFNI). La simplicidad del formato gzip significa que a los desarrolladores les resulta fácil incluir soporte en sus herramientas. Por lo tanto, gzip juega un nicho importante en la comunidad. Sin embargo, los formatos modernos que fueron diseñados para hardware moderno y aprovechan nuevas técnicas tienen beneficios inherentes.
El script 5decompress.sh
nos permite comparar la velocidad de descompresión. La descompresión es más rápida que la compresión. Sin embargo, la descompresión gzip no puede aprovechar varios subprocesos y, por lo general, es más lenta que los formatos de compresión modernos. En esta prueba, todas las herramientas gz descomprimen esos datos. Por el contrario, bzip2 y ztd descomprimen datos comprimidos a un tamaño más pequeño. La velocidad en megabytes por segundo se calcula en función del tamaño descomprimido. Es típico que una compresión más compacta utilice algoritmos más complicados, por lo que comparar entre formatos es un desafío. De todos modos, entre las herramientas gz, zlib-ng muestra un rendimiento de descompresión superior:
Velocidad (mb/s) | cerdo-CF | cerdo-ng | pigz-Sys | zip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
Descompresión | 278 | 300 | 274 | 244 | 122 | 236 |
Ejecute el punto de referencia con un comando como el siguiente:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
descargará y creará copias de pigz utilizando diferentes variantes de zlib (system, CloudFlare, ng). También descarga imágenes de muestra para probar la compresión, específicamente las exploraciones de resonancia magnética de muestra que se copian en la carpeta corpus
. Primero debe ejecutar este script una vez, antes que los demás scripts. Todos los demás scripts se pueden ejecutar de forma independiente unos de otros.2test.sh
compara la velocidad de las diferentes versiones de pigz, así como la del gzip de un solo subproceso del sistema. Puede reemplazar los archivos en la carpeta corpus
por otros más representativos de su conjunto de datos.3slowtest.sh
descarga el corpus de Silesia y prueba la velocidad de compresión. Este corpus es popular: punto de referencia 1, punto de referencia 2, punto de referencia 3.4verify.sh
prueba la compresión y descompresión de cada método, asegurando que puedan almacenar datos sin pérdida.5decompress.sh
evalúa la velocidad de descompresión. En general, el formato gzip se comprime lentamente pero se descomprime rápido (particularmente en comparación con los formatos desarrollados al mismo tiempo). Sin embargo, la descompresión de gzip es lenta en comparación con el zstd moderno. Además, si bien la compresión gzip puede beneficiarse del procesamiento paralelo, la descompresión no. Una característica importante de este script es que cada variante de zlib aporta archivos comprimidos al corpus de prueba y luego cada herramienta se prueba en este corpus completo. Esto garantiza que estemos comparando tareas similares, ya que algunos métodos de compresión zlib pueden generar archivos más pequeños a costa de crear archivos que se descomprimen más lentamente.6speed_size.sh
compara diferentes variantes de pigz con gzip, zstd y bzip2 para comprimir el corpus de Silesia. Cada herramienta se prueba a diferentes niveles de compresión, pero siempre utilizando el número preferido de hilos. blocksize
que corresponda al número de subprocesos para la compresión. Este repositorio incluye el script test_mgzip.py
para evaluar esta herramienta.