Eerste stabiele release van de Mold builder ontwikkeld door LLVM lld

Rui Ueyama, auteur van de LLVM lld-linker en de chibicc-compiler, presenteerde de eerste stabiele release van de nieuwe krachtige Mold-linker, die merkbaar voorloopt op de GNU gold- en LLVM lld-linkers in termen van koppelingssnelheid van objectbestanden. Het project wordt beschouwd als klaar voor productie-implementaties en kan worden gebruikt als een snellere transparante vervanging voor de GNU-linker op Linux-systemen. Plannen voor de volgende grote release zijn onder meer het klaarmaken van ondersteuning voor het macOS-platform, waarna zal worden begonnen met het aanpassen van Mold voor Windows.

Mold is geschreven in C++ (C++20) en gedistribueerd onder de AGPLv3-licentie, die GPLv3-compatibel maar niet GPLv2-compatibel is, omdat er wijzigingen moeten worden geopend bij het ontwikkelen van netwerkservices. Deze keuze is het gevolg van de wens om ontwikkelingsfinanciering te verkrijgen - de auteur is bereid de rechten op de code te verkopen voor herlicenties onder een permissieve licentie, zoals MIT, of een afzonderlijke commerciële licentie te verstrekken aan degenen die niet tevreden zijn met de AGPL.

Mold ondersteunt alle functies van de GNU-linker en is erg snel, linken met slechts de helft van de snelheid van het simpelweg kopiëren van bestanden met cp. Bij het bouwen van Chrome 96 (codegrootte 1.89 GB) duurt het bijvoorbeeld 8 seconden om c debuginfo uitvoerbare bestanden te bouwen op een 53-core computer met GNU gold, 11.7 seconden voor LLVM lld en slechts 2.2 seconden voor Mold (26 keer sneller dan GNU-goud). Bij het koppelen van Clang 13 (3.18 GB) duurt GNU gold 64 seconden, LLVM lld duurt 5.8 seconden en Mold duurt 2.9 seconden. Bij het koppelen van Firefox 89 (1.64 GB) duurt GNU gold 32.9 seconden, LLVM lld 6.8 ​​seconden en Mold 1.4 seconden.

Eerste stabiele release van de Mold builder ontwikkeld door LLVM lld

Het verkorten van de verbindingstijd kan de bruikbaarheid van het ontwikkelen van grote projecten aanzienlijk verbeteren door de wachttijd in het proces van het genereren van uitvoerbare bestanden tijdens het debuggen en testen van wijzigingen te verminderen. Mould werd ingegeven door de ergernis om te moeten wachten tot de koppeling voltooid was na elke wijziging in de code, evenals de slechte prestaties van bestaande linkers op multi-core systemen, en de wens om een ​​fundamenteel andere koppelingsarchitectuur te proberen zonder toevlucht te nemen tot onnodige gecompliceerde modellen, zoals incrementele koppeling.

De hoge prestaties van het koppelen van een uitvoerbaar bestand uit een groot aantal objectbestanden die door de compiler in Mold zijn voorbereid, worden bereikt door snellere algoritmen te gebruiken, actief parallelle bewerkingen tussen beschikbare CPU-kernen te maken en efficiëntere gegevensstructuren te gebruiken. Mold implementeert bijvoorbeeld de techniek van het gelijktijdig uitvoeren van intensieve berekeningen met het kopiëren van bestanden, het vooraf ophalen van objectbestanden in het geheugen, het gebruik van snelle hash-tabellen bij het oplossen van tekens, het scannen van verhuistabellen in een afzonderlijke thread en het ontdubbelen van samengevoegde secties die in verschillende bestanden worden herhaald.

Bron: opennet.ru

Voeg een reactie