Prvé stabilné vydanie nástroja na tvorbu foriem vyvinutého spoločnosťou LLVM lld

Rui Ueyama, autor linkera LLVM lld a kompilátora chibicc, predstavil prvé stabilné vydanie nového vysokovýkonného linkera Mold, ktorý je v rýchlosti spájania objektových súborov výrazne rýchlejší ako linkery GNU gold a LLVM lld. Projekt sa považuje za pripravený na produkčnú implementáciu a možno ho použiť ako rýchlejšiu a transparentnú náhradu za GNU linker na systémoch Linux. Plány pre ďalšie hlavné vydanie zahŕňajú dokončenie podpory pre platformu macOS, po ktorej sa začnú práce na prispôsobení Mold pre Windows.

Mold je napísaný v C++ (C++20) a je licencovaný pod AGPLv3, ktorá je kompatibilná s GPLv3, ale nie je kompatibilná s GPLv2, pretože vyžaduje otvorené zmeny pri vývoji sieťových služieb. Táto voľba je vysvetlená túžbou získať finančné prostriedky na vývoj - autor je ochotný predať práva na kód na opätovné licencovanie v rámci permisívnej licencie, ako je napríklad MIT, alebo poskytnúť samostatnú komerčnú licenciu pre tých, ktorí nie sú spokojní s AGPL.

Mold podporuje všetky funkcie GNU linkera a má veľmi vysoký výkon – linkovanie sa vykonáva rýchlosťou len polovičnou ako pri jednoduchom kopírovaní súborov pomocou nástroja cp. Napríklad pri zostavovaní prehliadača Chrome 96 (veľkosť kódu 1.89 GB) trvá prepojenie spustiteľných súborov s informáciami o ladení na 8-jadrovom počítači pomocou GNU gold, LLVM lld – 53 sekundy a Mold iba 11.7 sekundy (2.2-krát rýchlejšie ako GNU zlato). Pri prepojení Clang 26 (13 GB) to trvá 3.18 sekúnd v GNU gold, 64 sekundy v LLVM lld a 5.8 sekundy v Mold. Pri zostavovaní Firefoxu 2.9 (89 GB) to trvá 1.64 sekundy v GNU gold, 32.9 sekundy v LLVM lld a 6.8 sekundy v Mold.

Prvé stabilné vydanie nástroja na tvorbu foriem vyvinutého spoločnosťou LLVM lld

Skrátenie času zostavovania môže výrazne zlepšiť pohodlie pri vývoji veľkých projektov skrátením čakania v procese generovania spustiteľných súborov pri ladení a testovaní zmien. Motiváciou na vytvorenie Mold bola frustrácia z nutnosti čakať na dokončenie prepojenia po každej zmene kódu, slabý výkon existujúcich linkerov na viacjadrových systémoch a túžba vyskúšať zásadne odlišnú architektúru prepojenia bez toho, aby sa uchyľovali k príliš komplikovaným modelom, ako je napr. ako prírastkové prepojenie.

Vysoký výkon prepojenia spustiteľného súboru z veľkého počtu kompilátorom pripravených objektových súborov v Molde je dosiahnutý použitím rýchlejších algoritmov, aktívnej paralelizácie operácií medzi dostupnými CPU jadrami a využitím efektívnejších dátových štruktúr. Napríklad Mold implementuje techniky na vykonávanie intenzívnych výpočtov pri kopírovaní súborov, predbežné načítanie súborov objektov do pamäte, používanie rýchlych hašovacích tabuliek na rozlíšenie znakov, skenovanie relokačných tabuliek v samostatnom vlákne a deduplikáciu zlúčených sekcií, ktoré sa opakujú v rôznych súboroch.

Zdroj: opennet.ru

Pridať komentár