SIMD améliore les performances de zlib-rs : l’engagement envers Rust pour une compression plus sûre et efficace

SIMD améliore les performances de zlib-rs : l'engagement envers Rust pour une compression plus sûre et efficace

Le projet zlib-rs illustre comment l’utilisation stratégique des instructions SIMD peut transformer les performances des bibliothèques essentielles tout en renforçant la sécurité grâce à la gestion de mémoire sécurisée de Rust.

La Fondation Trifecta Tech continue de révolutionner l’infrastructure open source avec son initiative de compression de données basée sur Rust. Cette fois, l’accent est mis sur l’amélioration des performances de la bibliothèque zlib-rs, une alternative sécurisée et compatible à la célèbre zlib écrite à l’origine en C. Dans une série de publications techniques, les développeurs ont démontré comment l’utilisation des instructions SIMD (Single Instruction, Multiple Data) peut apporter une différence significative en termes d’efficacité.

Pourquoi SIMD ?

Face au ralentissement de la loi de Moore, les fabricants de processeurs ont opté pour une approche différente : au lieu d’augmenter la fréquence, ils ont permis à une seule instruction de traiter plusieurs données simultanément. C’est ainsi qu’est né le SIMD, présent dans des architectures comme x86_64 ou ARM NEON, avec des registres de 128, 256 ou même 512 bits. Ces extensions permettent d’effectuer des opérations vectorielles telles que des additions, des soustractions ou des comparaisons de manière massive, accélérant ainsi des fonctions critiques utilisées par un compresseur de données.

zlib-rs et le cas de slide_hash_chain

Une des fonctions clés de zlib-rs, slide_hash_chain, ajuste les index d’une table durant la compression. Dans sa version initiale, mise en œuvre en Rust pur, elle parcourait simplement la table en soustrayant une valeur à chaque élément. Ce qui est intéressant, c’est que lorsque les développeurs examinent le code assembleur généré par le compilateur, ils constatent qu’en raison de l’autovectorisation, Rust peut déjà utiliser des registres SIMD sans instructions explicites.

Cependant, l’histoire ne s’arrête pas là. Trifecta a encore optimisé le code en utilisant des blocs de 32 et 64 éléments (selon le type d’instruction SIMD disponible), réduisant le nombre d’instructions et améliorant l’efficacité sans compromettre la portabilité. Sur les architectures modernes, ces optimisations permettent une utilisation complète des registres AVX2 (256 bits), et la mise en œuvre optimale est choisie à l’exécution grâce à la détection dynamique des capacités du processeur.

La puissance de la comparaison SIMD : compare256

Dans le deuxième article technique, Trifecta aborde le défi de la comparaison de deux blocs de données de 256 octets pour détecter des correspondances. La fonction compare256, dans sa forme la plus simple, compare les octets un à un et compte combien d’éléments concordent jusqu’à la première différence. Bien que Rust génère un assembleur satisfaisant, incapables de vectoriser ce motif par défaut, l’équipe a mis en œuvre manuellement une version basée sur SIMD en utilisant les registres xmm et des instructions comme _mm_cmpeq_epi8 et _mm_movemask_epi8.

Cette version SIMD effectue des comparaisons de 16 octets simultanément, convertit les résultats en un masque de bits puis compte les correspondances par des opérations bit à bit. Le résultat : une performance 10 fois supérieure dans certains cas par rapport à la version traditionnelle.

Compatibilité, sécurité et efficacité

L’une des clés de l’approche de Trifecta est de proposer des versions génériques et optimisées de chaque fonction, sélectionnées à l’exécution en fonction des capacités du matériel. Cela permet de distribuer un seul binaire compatible avec plusieurs architectures, tout en maintenant la sécurité et la performance sans fragmentation.

Grâce à Rust et à son modèle de sécurité en temps de compilation, zlib-rs élimine des catégories entières d’erreurs de mémoire courantes en C, telles que les débordements de tampon ou les accès invalides. En combinant cela avec le SIMD, on obtient une bibliothèque plus robuste, rapide et prête à relever les défis de l’infrastructure moderne.

Prochains Pas

Trifecta ne s’arrête pas à zlib. L’organisation travaille également sur bzip2-rs et cherche des financements pour développer des implémentations sécurisées en Rust de zstd et xz, complétant ainsi un écosystème de compression moderne et fiable.

Les développeurs intéressés peuvent facilement collaborer ou adopter zlib-rs, que ce soit dans des projets Rust ou même dans des applications C, grâce à la bibliothèque libz-rs-sys, qui agit comme un substitut compatible avec l’API originale de zlib.

Conclusion : Le travail de la Fondation Trifecta Tech montre que le chemin vers une infrastructure plus sécurisée passe par l’utilisation de langages modernes comme Rust et l’exploitation maximale du potentiel du matériel moderne. L’optimisation de zlib-rs grâce au SIMD améliore non seulement les performances, mais marque également un tournant dans la manière dont les bibliothèques critiques pour les systèmes d’exploitation du futur devraient être développées.

Références : Administración de Sistemas, SIMD in zlib-rs (part 1): Autovectorization and target features et SIMD in zlib-rs (part 2): compare256

le dernier