Første stabile utgivelse av Mold-byggeren utviklet av LLVM lld

Rui Ueyama, forfatter av LLVM lld-linkeren og chibicc-kompilatoren, presenterte den første stabile utgivelsen av den nye høyytelses Mold-linkeren, som er merkbart raskere enn GNU gold- og LLVM lld-linkerne når det gjelder hastigheten på kobling av objektfiler. Prosjektet anses som klart for produksjonsimplementering og kan brukes som en raskere, transparent erstatning for GNU-linkeren på Linux-systemer. Planene for den neste store utgivelsen inkluderer fullføring av støtte for macOS-plattformen, hvoretter arbeidet vil begynne med å tilpasse Mold for Windows.

Mold er skrevet i C++ (C++20) og distribuert under AGPLv3-lisensen, som er kompatibel med GPLv3, men ikke kompatibel med GPLv2, siden den krever åpne endringer ved utvikling av nettverkstjenester. Dette valget forklares av ønsket om å få utviklingsmidler - forfatteren er villig til å selge rettighetene til koden for re-lisensiering under en tillatende lisens, for eksempel MIT, eller gi en separat kommersiell lisens for de som ikke er fornøyd med AGPL.

Mold støtter alle funksjonene til GNU-linkeren og har svært høy ytelse - kobling utføres med en hastighet som bare er halvparten så rask som å kopiere filer med cp-verktøyet. For eksempel, når du bygger Chrome 96 (kodestørrelse 1.89 GB), tar det 8 sekunder å koble kjørbare filer med feilsøkingsinformasjon på en 53-kjerne datamaskin ved å bruke GNU gold, LLVM lld - 11.7 sekunder og Mold bare 2.2 sekunder (26 ganger raskere enn GNU gull). Når du kobler til Clang 13 (3.18 GB), tar det 64 sekunder i GNU gull, 5.8 sekunder i LLVM lld og 2.9 sekunder i Mold. Når du bygger Firefox 89 (1.64 GB), tar det 32.9 sekunder i GNU gull, 6.8 sekunder i LLVM lld og 1.4 sekunder i Mold.

Første stabile utgivelse av Mold-byggeren utviklet av LLVM lld

Å redusere byggetiden kan forbedre bekvemmeligheten ved å utvikle store prosjekter betydelig ved å redusere ventetiden i prosessen med å generere kjørbare filer ved feilsøking og testing av endringer. Motivasjonen for å lage Mold var frustrasjonen over å måtte vente på at koblingen ble fullført etter hver kodeendring, den dårlige ytelsen til eksisterende linkere på flerkjernesystemer, og ønsket om å prøve en fundamentalt annerledes koblingsarkitektur uten å ty til altfor kompliserte modeller som f.eks. som inkrementell kobling.

Høy ytelse ved å koble en kjørbar fil fra et stort antall kompilator-forberedte objektfiler i Mold oppnås ved å bruke raskere algoritmer, aktiv parallellisering av operasjoner mellom tilgjengelige CPU-kjerner og bruk av mer effektive datastrukturer. For eksempel implementerer Mold teknikker for å utføre intensive beregninger mens du kopierer filer, forhåndslaster objektfiler i minnet, bruker raske hashtabeller for tegnoppløsning, skanner flyttetabeller i en egen tråd og dedupliserer sammenslåtte seksjoner som gjentas på tvers av forskjellige filer.

Kilde: opennet.ru

Legg til en kommentar