Prima versione stabile del costruttore di stampi sviluppato da LLVM lld

Rui Ueyama, autore del linker LLVM lld e del compilatore chibicc, ha presentato la prima versione stabile del nuovo linker Mold ad alte prestazioni, che è notevolmente più veloce dei linker GNU gold e LLVM lld nella velocità di collegamento dei file oggetto. Il progetto è considerato pronto per l'implementazione in produzione e può essere utilizzato come sostituto più veloce e trasparente del linker GNU sui sistemi Linux. I piani per la prossima major release includono il completamento del supporto per la piattaforma macOS, dopodiché inizierà il lavoro sull’adattamento di Mold per Windows.

Mold è scritto in C++ (C++20) ed è concesso in licenza sotto AGPLv3, che è compatibile con GPLv3, ma non compatibile con GPLv2, poiché richiede modifiche aperte durante lo sviluppo dei servizi di rete. Questa scelta è spiegata dal desiderio di ottenere finanziamenti per lo sviluppo: l'autore è disposto a vendere i diritti sul codice per una nuova licenza con una licenza permissiva, come il MIT, o fornire una licenza commerciale separata per coloro che non sono soddisfatti dell'AGPL.

Mold supporta tutte le funzionalità del linker GNU e ha prestazioni molto elevate: il collegamento viene eseguito a una velocità solo la metà rispetto alla semplice copia dei file con l'utilità cp. Ad esempio, quando si crea Chrome 96 (dimensione del codice 1.89 GB), sono necessari 8 secondi per collegare file eseguibili con debuginfo su un computer a 53 core utilizzando GNU gold, LLVM lld - 11.7 secondi e Mold solo 2.2 secondi (26 volte più veloce di GNU oro). Quando si collega Clang 13 (3.18 GB), sono necessari 64 secondi in GNU Gold, 5.8 secondi in LLVM lld e 2.9 secondi in Mold. Quando si crea Firefox 89 (1.64 GB), ci vogliono 32.9 secondi in GNU gold, 6.8 secondi in LLVM lld e 1.4 secondi in Mold.

Prima versione stabile del costruttore di stampi sviluppato da LLVM lld

La riduzione del tempo di compilazione può migliorare significativamente la comodità di sviluppare progetti di grandi dimensioni riducendo l'attesa nel processo di generazione di file eseguibili durante il debug e il test delle modifiche. La motivazione per la creazione di Mold era la frustrazione di dover attendere il completamento del collegamento dopo ogni modifica del codice, le scarse prestazioni dei linker esistenti su sistemi multi-core e il desiderio di provare un'architettura di collegamento fondamentalmente diversa senza ricorrere a modelli eccessivamente complicati come come collegamento incrementale.

Le elevate prestazioni di collegamento di un file eseguibile da un gran numero di file oggetto preparati dal compilatore in Mold si ottengono utilizzando algoritmi più veloci, parallelizzazione attiva delle operazioni tra i core della CPU disponibili e l'uso di strutture dati più efficienti. Ad esempio, Mold implementa tecniche per eseguire calcoli intensivi durante la copia di file, il precaricamento di file oggetto in memoria, l'utilizzo di tabelle hash veloci per la risoluzione dei caratteri, la scansione di tabelle di riposizionamento in un thread separato e la deduplicazione di sezioni unite che vengono ripetute su file diversi.

Fonte: opennet.ru

Aggiungi un commento