Première version stable du constructeur de moules développé par LLVM lld

Rui Ueyama, auteur de l'éditeur de liens LLVM lld et du compilateur chibicc, a présenté la première version stable du nouvel éditeur de liens Mold hautes performances, qui est nettement plus rapide que les éditeurs de liens GNU gold et LLVM lld en termes de vitesse de liaison des fichiers objets. Le projet est considéré comme prêt pour la mise en œuvre en production et peut être utilisé comme un remplacement plus rapide et transparent de l'éditeur de liens GNU sur les systèmes Linux. Les plans pour la prochaine version majeure incluent la prise en charge complète de la plate-forme macOS, après quoi les travaux d'adaptation de Mold pour Windows commenceront.

Mold est écrit en C++ (C++20) et est sous licence AGPLv3, qui est compatible avec GPLv3, mais pas compatible avec GPLv2, car il nécessite des modifications ouvertes lors du développement de services réseau. Ce choix s'explique par le désir d'obtenir un financement pour le développement - l'auteur est prêt à vendre les droits du code pour obtenir une nouvelle licence sous une licence permissive, telle que le MIT, ou à fournir une licence commerciale distincte pour ceux qui ne sont pas satisfaits de l'AGPL.

Mold prend en charge toutes les fonctionnalités de l'éditeur de liens GNU et offre des performances très élevées - la liaison est effectuée à une vitesse deux fois moins rapide que la simple copie de fichiers avec l'utilitaire cp. Par exemple, lors de la création de Chrome 96 (taille de code 1.89 Go), il faut 8 secondes pour lier les fichiers exécutables avec les informations de débogage sur un ordinateur à 53 cœurs utilisant GNU Gold, LLVM lld - 11.7 secondes et Mold seulement 2.2 secondes (26 fois plus rapide que GNU or). Lors de la liaison de Clang 13 (3.18 Go), cela prend 64 secondes dans GNU Gold, 5.8 secondes dans LLVM lld et 2.9 secondes dans Mold. Lors de la construction de Firefox 89 (1.64 Go), cela prend 32.9 secondes dans GNU Gold, 6.8 secondes dans LLVM lld et 1.4 seconde dans Mold.

Première version stable du constructeur de moules développé par LLVM lld

La réduction du temps de construction peut améliorer considérablement la commodité du développement de grands projets en réduisant l'attente dans le processus de génération des fichiers exécutables lors du débogage et du test des modifications. La motivation pour créer Mold était la frustration de devoir attendre que la liaison soit terminée après chaque changement de code, les mauvaises performances des éditeurs de liens existants sur les systèmes multicœurs et le désir d'essayer une architecture de liaison fondamentalement différente sans recourir à des modèles trop compliqués tels que comme liaison incrémentielle.

Les performances élevées de liaison d'un fichier exécutable à partir d'un grand nombre de fichiers objets préparés par le compilateur dans Mold sont obtenues grâce à l'utilisation d'algorithmes plus rapides, à la parallélisation active des opérations entre les cœurs de processeur disponibles et à l'utilisation de structures de données plus efficaces. Par exemple, Mold implémente des techniques pour effectuer des calculs intensifs lors de la copie de fichiers, précharger des fichiers objets en mémoire, utiliser des tables de hachage rapides pour la résolution des caractères, analyser les tables de relocalisation dans un thread séparé et dédupliquer les sections fusionnées qui sont répétées dans différents fichiers.

Source: opennet.ru

Ajouter un commentaire