Primer llançament estable del constructor de motlles desenvolupat per LLVM lld

Rui Ueyama, autor de l'enllaçador LLVM lld i del compilador chibicc, va presentar la primera versió estable del nou enllaçador Mold d'alt rendiment, que és notablement més ràpid que els enllaçadors GNU gold i LLVM lld en la velocitat d'enllaçar fitxers d'objectes. El projecte es considera llest per a la implementació de producció i es pot utilitzar com a reemplaçament més ràpid i transparent de l'enllaçador GNU en sistemes Linux. Els plans per a la propera versió important inclouen completar el suport per a la plataforma macOS, després del qual es començarà a treballar per adaptar Mold per a Windows.

Mold està escrit en C++ (C++20) i té una llicència sota AGPLv3, que és compatible amb GPLv3, però no és compatible amb GPLv2, ja que requereix canvis oberts quan es desenvolupen serveis de xarxa. Aquesta elecció s'explica pel desig d'obtenir finançament per al desenvolupament: l'autor està disposat a vendre els drets del codi per a la rellicència sota una llicència permissiva, com ara MIT, o proporcionar una llicència comercial separada per a aquells que no estiguin satisfets amb l'AGPL.

Mold admet totes les característiques de l'enllaçador GNU i té un rendiment molt alt: l'enllaç es realitza a una velocitat només la meitat de la de copiar fitxers amb la utilitat cp. Per exemple, quan es construeix Chrome 96 (mida del codi 1.89 GB), es triguen 8 segons a enllaçar fitxers executables amb informació de depuració en un ordinador de 53 nuclis amb GNU gold, LLVM lld - 11.7 segons i Mold només 2.2 segons (26 vegades més ràpid que GNU gold). En enllaçar Clang 13 (3.18 GB), triguen 64 segons a GNU gold, 5.8 segons a LLVM lld i 2.9 segons a Mold. Quan es construeix Firefox 89 (1.64 GB), es triguen 32.9 segons a GNU gold, 6.8 segons a LLVM lld i 1.4 segons a Mold.

Primer llançament estable del constructor de motlles desenvolupat per LLVM lld

La reducció del temps de creació pot millorar significativament la comoditat de desenvolupar grans projectes reduint l'espera en el procés de generació de fitxers executables quan es depuren i es proveen els canvis. La motivació per crear Mold va ser la frustració d'haver d'esperar que es completi l'enllaç després de cada canvi de codi, el mal rendiment dels enllaços existents en sistemes multinúclis i el desig de provar una arquitectura d'enllaç fonamentalment diferent sense recórrer a models massa complicats com ara. com a enllaç incremental.

L'alt rendiment d'enllaçar un fitxer executable a partir d'un gran nombre de fitxers d'objectes preparats pel compilador a Mold s'aconsegueix mitjançant l'ús d'algoritmes més ràpids, la paral·lelització activa d'operacions entre els nuclis de CPU disponibles i l'ús d'estructures de dades més eficients. Per exemple, Mold implementa tècniques per realitzar càlculs intensius mentre es copien fitxers, carregar prèviament fitxers d'objectes a la memòria, utilitzar taules hash ràpides per resoldre caràcters, escanejar taules de reubicació en un fil separat i desduplicar seccions combinades que es repeteixen en diferents fitxers.

Font: opennet.ru

Afegeix comentari