LLVM lld:n kehittämän Mold builderin ensimmäinen vakaa julkaisu

Rui Ueyama, LLVM lld -linkkerin ja chibicc-kääntäjän kirjoittaja, esitteli ensimmäisen vakaan julkaisun uudesta korkean suorituskyvyn Mold-linkkeristä, joka on huomattavasti edellä GNU gold- ja LLVM lld -linkkereitä kohdetiedostojen linkitysnopeuden suhteen. Projektin katsotaan olevan valmis tuotantokäyttöön, ja sitä voidaan käyttää nopeampana läpinäkyvänä GNU-linkerin korvaajana Linux-järjestelmissä. Seuraavan suuren julkaisun suunnitelmiin kuuluu macOS-alustan tuen saattaminen valmiiksi, minkä jälkeen Mold for Windows -sovelluksen mukauttaminen aloitetaan.

Mold on kirjoitettu kielellä C++ (C++20) ja jaettu AGPLv3-lisenssillä, joka on GPLv3-yhteensopiva, mutta ei GPLv2-yhteensopiva, koska se vaatii muutosten avaamista verkkopalveluita kehitettäessä. Tämä valinta johtuu halusta saada kehitysrahoitusta - kirjoittaja on valmis myymään koodin oikeudet uudelleenlisensointia varten sallivalla lisenssillä, kuten MIT:llä, tai tarjoamaan erillisen kaupallisen lisenssin niille, jotka eivät ole tyytyväisiä AGPL:ään.

Mold tukee kaikkia GNU-linkerin ominaisuuksia ja on erittäin nopea, linkittäen vain puolet nopeammin kuin tiedostojen kopioiminen cp:llä. Esimerkiksi kun rakennetaan Chrome 96 (koodikoko 1.89 Gt), c debuginfo -suoritustiedostojen rakentaminen kestää 8 sekuntia 53-ytimisessä tietokoneessa GNU goldilla, 11.7 sekuntia LLVM lld:lle ja vain 2.2 sekuntia Moldille (26 kertaa nopeampi kuin GNU kultaa). Kun linkität Clang 13:n (3.18 Gt), GNU gold kestää 64 sekuntia, LLVM lld 5.8 sekuntia ja Mold 2.9 sekuntia. Kun linkität Firefox 89:n (1.64 Gt), GNU gold kestää 32.9 sekuntia, LLVM lld 6.8 ​​sekuntia ja Mold 1.4 sekuntia.

LLVM lld:n kehittämän Mold builderin ensimmäinen vakaa julkaisu

Linkkiajan lyhentäminen voi parantaa huomattavasti suurten projektien kehittämisen käytettävyyttä vähentämällä odotusaikaa suoritettavien tiedostojen luomisessa virheenkorjauksen ja muutosten testauksen aikana. Mold johtui ärsytyksestä, joka aiheutui linkityksen valmistumisesta jokaisen koodin muutoksen jälkeen, sekä olemassa olevien linkkereiden huonosta suorituskyvystä moniytimisissä järjestelmissä ja halusta kokeilla täysin erilaista linkitysarkkitehtuuria turvautumatta tarpeettomasti. monimutkaiset mallit, kuten inkrementaalinen linkitys.

Suoritettavan tiedoston linkittäminen suuresta määrästä Moldissa valmistelemia objektitiedostoja saavutetaan käyttämällä nopeampia algoritmeja, aktiivisesti rinnakkaistoimintoja käytettävissä olevien CPU-ytimien välillä ja tehokkaampia tietorakenteita. Esimerkiksi Mold toteuttaa tekniikan, jossa suoritetaan intensiivisiä laskelmia samanaikaisesti tiedostojen kopioimisen, objektitiedostojen esihaun muistiin, nopeiden hajautustaulukoiden käyttämisen merkkien selvittämisessä, siirtotaulukoiden skannaamisen erillisessä säikeessä ja eri tiedostoissa toistuvien yhdistettyjen osien kopioinnin poistamisen kanssa.

Lähde: opennet.ru

Lisää kommentti