Rui Ueyama, az LLVM lld és a chibicc linker szerzője bemutatta az új, nagy teljesítményű Mold linkert, amely jelentősen felülmúlja a GNU gold és az LLVM lld sebességét az objektumfájlok összekapcsolásában. A projekt készen áll a munkahelyi bevezetésre, és gyorsabb, átláthatóbb alternatívaként használható a GNU linker számára Linux rendszereken. A következő jelentős kiadás tervei között szerepel a macOS platform támogatásának megvalósítása, ezt követően pedig a Mold Windows-ra való adaptálásán fognak dolgozni.
A Mold C++ (C++20) nyelven íródott, és az AGPLv3 licence alatt terjesztik, amely kompatibilis a GPLv3-mal, de nem kompatibilis a GPLv2-vel, mivel megköveteli a módosítások közzétételét a hálózati szolgáltatások fejlesztésekor. Ez a választás a fejlesztés finanszírozásának megszerzésére irányul, az író kész eladni a kódjogokat a kedvezőbb licenc alatt történő újralicencelés céljából, például MIT licencia keretein belül, vagy külön kereskedelmi licencet kínálni azoknak, akiket nem elégít ki az AGPL.
A Mold támogatja a GNU linker összes funkcióját, és rendkívül magas teljesítménnyel rendelkezik — az összekapcsolás sebessége csupán kétszer lassabb, mint a fájlok egyszerű másolása a cp utilitással. Például a Chrome 96 (1,89 GB kódméret) számára a végrehajtható fájlok debuggolt verzióinak összekapcsolásához 8 magos számítógépen 53 másodperc szükséges a GNU gold használatával, 11,7 másodperc az LLVM lld-vel, míg a Mold csupán 2,2 másodperc (26-szor gyorsabb a GNU gold-nál). A Clang 13 (3,18 GB) összekapcsolása 64 másodpercet igényel a GNU goldnál, 5,8 másodpercet az LLVM lld-nél, és 2,9 másodpercet a Moldnál. A Firefox 89 (1,64 GB) összekapcsolásához a GNU gold 32,9 másodpercre, az LLVM lld 6,8 másodpercre, a Mold pedig 1,4 másodpercre van szüksége.

Az összekapcsolási idő csökkentése jelentősen javítja a nagyméretű projektek fejlesztési kényelmét, mivel csökkenti a végrehajtható fájlok létrehozása során a várakozási időt a módosítások hibakeresése és tesztelése közben. A Mold létrehozásának motivációja a kód minden módosítása után a linkelés befejezésére való várakozás szükségességének frusztrációja volt, valamint a meglévő linkerek alacsony hatékonysága a többmagos rendszereken, és a másféle linkelési architektúra kipróbálásának vágya, anélkül hogy túlságosan bonyolult modellekhez kellene folyamodni, mint például az inkrementális linkelés.
A magas teljesítményű végrehajtási fájl elrendezés, amely számos készített objektumfájlból származik a Moldban, gyorsabb algoritmusok alkalmazásával, a CPU rendelkezésre álló magjai közötti műveletek aktív párhuzamosításával és hatékonyabb adatszerkezetek használatával érhető el. Például a Moldban megvalósították a számítási intenzív feladatok párhuzamos végrehajtását a fájlok másolásával, az objektumfájlok előzetes memória-betöltésével, gyors hash-táblák alkalmazásával a szimbólumok feloldásakor, a mozgási táblázatok külön szálban történő átvizsgálásával és a különböző fájlokban ismétlődő szekciók deduplikálásával.
Forrás: opennet.ru
