Ces scripts simples évaluent différentes bibliothèques de compression zlib pour le compresseur parallèle pigz. La compression parallèle peut utiliser plusieurs cœurs disponibles sur les ordinateurs modernes pour compresser rapidement les données. Cette technique peut être combinée avec le zlib CloudFlare qui accélère la compression en utilisant d'autres fonctionnalités du matériel moderne. Ici, j'ai adapté le script pour évaluer la compression .gz des images cérébrales au format NIfTI. Il est courant que des outils comme AFNI et FSL enregistrent les images NIfTI à l'aide de la compression gzip (fichiers .nii.gz). Les méthodes d'IRM modernes telles que le multibande génèrent d'énormes ensembles de données, ce qui nécessite un temps considérable pour compresser ces images.
Le graphique ci-dessous montre les performances de pigz par rapport au pigz monothread par défaut, de sorte que « 1 » indique des performances équivalentes. Les performances sont affichées pour 3 niveaux de compression : rapide (3, référence 35 secondes), par défaut (6, 50 s) et lent (9 183 s). L'axe horizontal montre le nombre de threads consacrés à la compression. À des niveaux de compression inférieurs (1), tous les outils sont relativement rapides, la lecture et l'écriture à partir du disque étant le facteur limitant le débit. À des niveaux de compression plus élevés, la combinaison de plusieurs threads et les améliorations de CloudFlare accélèrent considérablement les performances par rapport au gzip par défaut. Le système de test était un Intel Xeon Platinum 8260 à 24 cœurs (48 threads) :
Le graphique suivant montre chaque outil utilisant son nombre préféré de threads sur un ordinateur à 4 cœurs (8 threads) pour compresser le corpus populaire Silesia. Toutes les versions de pigz surpassent le gzip à thread unique du système. On peut voir que le format zstd moderne domine l'ancien et plus simple gzip. gzip a été largement adopté dans de nombreux domaines (par exemple en imagerie cérébrale, il est utilisé pour NIfTI, NRRD et AFNI). La simplicité du format gzip signifie qu'il est facile pour les développeurs d'inclure la prise en charge dans leurs outils. Par conséquent, gzip joue un créneau important dans la communauté. Cependant, les formats modernes conçus pour le matériel moderne et exploitant de nouvelles techniques présentent des avantages inhérents.
Le script 5decompress.sh
nous permet de comparer les vitesses de décompression. La décompression est plus rapide que la compression. Cependant, la décompression gzip ne peut pas exploiter plusieurs threads et est généralement plus lente que les formats de compression modernes. Dans ce test, tous les outils gz décompressent ces données. En revanche, bzip2 et ztd décompressent des données compressées à une taille plus petite. La vitesse en mégaoctets par seconde est calculée en fonction de la taille décompressée. Il est courant qu'une compression plus compacte utilise des algorithmes plus complexes, la comparaison entre les formats est donc difficile. Quoi qu'il en soit, parmi les outils gz, zlib-ng affiche des performances de décompression supérieures :
Vitesse (Mo/s) | pigz-CF | cochon-ng | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
Décompression | 278 | 300 | 274 | 244 | 122 | 236 |
Exécutez le benchmark avec une commande comme celle-ci :
1compile.sh
2test.sh
5decompress.sh
1compile.sh
téléchargera et construira des copies de pigz en utilisant différentes variantes de zlib (système, CloudFlare, ng). Il télécharge également des exemples d'images pour tester la compression, en particulier les exemples d'examens IRM qui sont copiés dans le dossier corpus
. Vous devez d'abord exécuter ce script une fois, avant les autres scripts. Tous les autres scripts peuvent être exécutés indépendamment les uns des autres.2test.sh
compare la vitesse des différentes versions de pigz ainsi que celle du gzip monothread du système. Vous pouvez remplacer les fichiers du dossier corpus
par des fichiers plus représentatifs de votre ensemble de données.3slowtest.sh
télécharge le corpus Silesia et teste la vitesse de compression. Ce corpus est populaire : benchmark 1, benchmark 2, benchmark 3.4verify.sh
teste la compression et la décompression de chaque méthode, s'assurant qu'elles sont capables de stocker des données sans perte.5decompress.sh
évalue la vitesse de décompression. En général, le format gzip est lent à compresser mais rapide à décompresser (notamment par rapport aux formats développés en même temps). Cependant, la décompression de gzip est lente par rapport au zstd moderne. De plus, même si la compression gzip peut bénéficier du traitement parallèle, ce n’est pas le cas de la décompression. Une caractéristique importante de ce script est que chaque variante de zlib apporte des fichiers compressés au corpus de test, puis chaque outil est testé sur ce corpus complet. Cela garantit que nous comparons des tâches similaires, car certaines méthodes de compression zlib peuvent générer des fichiers plus petits au prix de la création de fichiers plus lents à décompresser.6speed_size.sh
compare différentes variantes de pigz à gzip, zstd et bzip2 pour compresser le corpus Silesia. Chaque outil est testé à différents niveaux de compression, mais toujours en utilisant le nombre de threads préféré. blocksize
qui correspond au nombre de threads à compresser. Ce référentiel inclut le script test_mgzip.py
pour évaluer cet outil.