Technologie
Une avancée significative pour l’algorithme de compression haute vitesse LZ4
La dernière version de l’algorithme de compression LZ4 a reçu une amélioration de performance impressionnante, atteignant presque un ordre de grandeur.
LZ4 est reconnu comme l’un des algorithmes de compression les plus rapides sous Linux, mais la version récemment lancée, LZ4 1.10, élève considérablement les performances par rapport à ses prédécesseurs. Sur certains matériels, LZ4 1.10 parvient à compresser des données plus de cinq à presque dix fois plus rapidement que les versions antérieures, en exploitant plusieurs cœurs de processeur en parallèle.
Comme l’indiquent les notes de version :
Il existe de nombreux algorithmes de compression dans Linux et d’autres systèmes d’exploitation open source, tels que le désormais célèbre xz. Aucun d’entre eux ne peut être considéré comme le « meilleur », car chacun est optimisé pour des usages spécifiques : certains pour des fichiers volumineux, d’autres pour des types de données particuliers, d’autres encore pour obtenir la taille de fichier compressé la plus petite possible ou pour minimiser l’utilisation de la mémoire. L’algorithme LZ4 se distingue par son optimisation pour la vitesse. Sa description sur GitHub est « Algorithme de compression extrêmement rapide ».
Cet algorithme existe depuis un certain temps. Selon les informations disponibles, il a été mentionné pour la première fois par un média en 2012 et a été intégré au noyau Linux dans la version 3.11 l’année suivante. Il est utilisé pour compresser le SquashFS présent sur de nombreux supports de démarrage Linux depuis le noyau 3.19.
Pour ceux qui souhaitent en savoir plus, une explication concise mais riche sur le fonctionnement de LZ4 est disponible, rédigée par Yann Collet, un ingénieur de Facebook et également le créateur de Zstd et xxHash. Son travail a été parodié dans la série télévisée américaine Silicon Valley à travers un personnage nommé Richard Hendricks.
Une amélioration de performance aussi marquée pour un schéma de compression axé sur la vitesse, qui a plus de dix ans, est surprenante. Cette avancée est due à la répartition de la compression sur plusieurs cœurs de processeur, comme cela avait été réalisé dans l’implémentation C++ lz4mt. L’auteur de cette variante, Takayuki Matsuoka, a contribué à plusieurs modifications dans la nouvelle version de LZ4.
- Linux Mint 22 ‘Wilma’ reste le choix privilégié pour quitter Windows
- X.org s’attaque aux taux de rafraîchissement multi-écrans
- Un passionné d’OpenBSD propose un guide pour les utilisateurs peu techniques
- CachyOS, basé sur Arch, promet de la vitesse mais trébuche sur ses lacets
LZ4 était déjà capable de dépasser les 500 Mo par seconde sur chaque cœur, mais désormais, si vous disposez de nombreux cœurs, il peut atteindre des performances encore plus élevées. Le tableau dans l’annonce montre qu’un processeur AMD 7850HS, doté de huit cœurs, obtient des vitesses de compression sept à huit fois plus rapides, tandis qu’un Intel i7-9700K, également à huit cœurs, atteint presque six fois plus de rapidité.
Cette mise à jour met en lumière plusieurs points cruciaux. Tout d’abord, écrire un code efficace pour tirer parti du parallélisme de plusieurs cœurs de processeur est un défi complexe. L’implémentation parallélisée lz4mt date d’il y a dix ans, et il est remarquable qu’il ait fallu une décennie pour que cette avancée soit intégrée dans un algorithme axé sur la vitesse. Cela explique également pourquoi de nombreuses parties des systèmes d’exploitation modernes et des applications ne parviennent pas à exploiter efficacement plusieurs cœurs de processeur, ce qui contribue à la lenteur de l’augmentation du nombre de cœurs dans les processeurs de bureau par rapport à ceux des serveurs. Plus de cœurs ne peuvent pas accélérer un processus à thread unique, et en général, la plupart des applications courantes n’utilisent qu’un nombre limité de threads. Il n’existe toujours pas de méthode automatique pour paralléliser les algorithmes ; cela nécessite l’intervention d’experts.
Comme nous l’avons mentionné plus tôt cette année en discutant de l’enflure du code, le regretté Gene Amdahl a formalisé la loi d’Amdahl, qui stipule que les gains de performance liés à la parallélisation du code atteignent généralement un maximum d’environ 20 processeurs. Nous recommandons également vivement la présentation « L’avenir des microprocesseurs » de Sophie Wilson, co-créatrice d’Arm, qui souligne que l’industrie des puces en silicium est unique en ce sens qu’elle réussit à vendre des produits en grande quantité que les acheteurs ne peuvent pas utiliser pleinement. En effet, dans tout processeur moderne, si l’on pouvait activer tous les cœurs d’un die de processeur simultanément, cela entraînerait une surchauffe en quelques secondes.
En attendant, LZ4 1.10 permet d’exploiter un peu plus souvent les ressources disponibles. En plus de LZ4, une autre fonctionnalité intégrée au noyau Linux dans la version 3.11, surnommée avec humour « Linux pour les groupes de travail », est zswap, qui peut compresser les données avant qu’elles ne soient échangées vers la mémoire virtuelle. Comme nous l’avons décrit il y a quelques années, activer zswap peut considérablement améliorer les performances de tout système Linux utilisant intensivement l’échange. Lorsque la version 1.10 de LZ4 sera intégrée au noyau, cela deviendra encore plus rapide, mais en attendant, vous pouvez facilement l’activer et profiter des résultats dès aujourd’hui.