mold: Een massaal parallelle linker

Samenvatting

Linken is een cruciale stap in het software-buildproces die gecompileerde objectbestanden combineert tot één uitvoerbaar bestand of gedeelde bibliotheek. Ondanks decennia aan engineering-inspanningen blijven link-tijden een aanzienlijke flessenhals in de edit-compileer-debugcyclus, vooral voor grote C++ programma's. Bestaande linkers maken gebruik van beperkt parallellisme, waardoor de meeste CPU-cores onbenut blijven tijdens het linken.

Wij presenteren mold, een Unix/Linux-linker die dataparallellisme systematisch toepast over de gehele link-pipeline. We analyseren eerst de architecturale beperkingen die bestaande linkers belemmeren in schaalbaarheid, waaronder verstrengelde symboolresolutie en archiefverwerking, en laten vervolgens zien hoe een 'clean-slate' ontwerp dat deze ontkoppelt deze beperkingen overwint.

Bij grote praktijkprogramma's linkt mold debug-binaries van meerdere gigabytes in maximaal een paar seconden, en vaak in minder dan een seconde. Het is 2,4 tot 16,1 keer sneller dan de state-of-the-art lld-linker, en tot 112 keer sneller dan de traditionele GNU ld. Een ablatiestudie laat zien dat geen enkele optimalisatie domineert; de versnelling is het cumulatieve effect van het paralleliseren van alle passes.