První stabilní vydání Mold builderu vyvinutého LLVM lld

Rui Ueyama, autor linkeru LLVM lld a kompilátoru chibicc, představil první stabilní vydání nového vysoce výkonného linkeru Mold, který je znatelně napřed před linkery GNU gold a LLVM lld, pokud jde o rychlost propojování objektových souborů. Projekt je považován za připravený pro produkční nasazení a lze jej použít jako rychlejší transparentní náhradu za GNU linker na systémech Linux. Plány na další hlavní vydání zahrnují připravení podpory pro platformu macOS, po kterém začnou práce na adaptaci Mold pro Windows.

Mold je napsán v C++ (C++20) a distribuován pod licencí AGPLv3, která je kompatibilní s GPLv3, ale není kompatibilní s GPLv2, protože vyžaduje otevření změn při vývoji síťových služeb. Tato volba je způsobena touhou získat finanční prostředky na vývoj - autor je ochoten prodat práva na kód pro přelicencování pod licenční licencí, jako je MIT, nebo poskytnout samostatnou komerční licenci pro ty, kteří nejsou spokojeni s AGPL.

Mold podporuje všechny funkce GNU linkeru a je velmi rychlý, spojuje pouze poloviční rychlostí než pouhé kopírování souborů pomocí cp. Například při sestavování Chrome 96 (velikost kódu 1.89 GB) trvá sestavení spustitelných souborů c debuginfo na 8jádrovém počítači pomocí GNU gold 53 sekund, 11.7 sekundy LLVM lld a pouze 2.2 sekundy Mold (26krát rychlejší než GNU zlato). Při propojení Clang 13 (3.18 GB) trvá GNU gold 64 sekund, LLVM lld trvá 5.8 sekundy a Mold 2.9 sekundy. Při propojení Firefoxu 89 (1.64 GB) trvá GNU gold 32.9 sekundy, LLVM lld trvá 6.8 sekundy a Mold 1.4 sekundy.

První stabilní vydání Mold builderu vyvinutého LLVM lld

Snížení doby propojení může výrazně zlepšit použitelnost vývoje velkých projektů snížením čekání na proces generování spustitelných souborů během ladění a testování změn. Mold byl motivován nepříjemností, že musel čekat na dokončení propojení po každé změně kódu, stejně jako špatným výkonem stávajících linkerů na vícejádrových systémech a touhou vyzkoušet zásadně odlišnou architekturu propojení, aniž by se zbytečně uchylovalo k komplikované modely, jako je inkrementální spojování.

Vysokého výkonu propojení spustitelného souboru z velkého počtu objektových souborů připravených kompilátorem v Mold je dosaženo použitím rychlejších algoritmů, aktivní paralelizace operací mezi dostupnými jádry CPU a použitím efektivnějších datových struktur. Například Mold implementuje techniku ​​provádění intenzivních výpočtů současně s kopírováním souborů, přednačítáním objektových souborů do paměti, používáním rychlých hash tabulek při řešení znaků, skenováním relokačních tabulek v samostatném vláknu a deduplikací sloučených sekcí opakujících se v různých souborech.

Zdroj: opennet.ru

Přidat komentář