GNU/Linux >> Linux Esercitazione >  >> Linux

Cos'è il linker d'oro?

Il gold linker è stato progettato come linker specifico per ELF, con l'intenzione di produrre un linker più manutenibile e più veloce di BFD ld (il "tradizionale" linker GNU binutils). Come effetto collaterale, è infatti in grado di collegare programmi molto grandi utilizzando meno memoria rispetto a BFD ld , presumibilmente perché ci sono meno livelli di astrazione da gestire e perché le strutture dati del linker si mappano più direttamente al formato ELF.

Non sono sicuro che ci sia molta documentazione che affronti specificamente le differenze di progettazione tra i due linker e il loro effetto sull'uso della memoria. C'è una serie molto interessante di articoli sui linker di Ian Lance Taylor, l'autore dei vari linker GNU, che spiega molte delle decisioni di progettazione che hanno portato a gold . Lo scrive

Il linker su cui sto lavorando ora, chiamato gold, sarà il mio terzo. È esclusivamente un linker ELF. Ancora una volta, l'obiettivo è la velocità, in questo caso essere più veloce del mio secondo linker. Quel linker è stato notevolmente rallentato nel corso degli anni aggiungendo il supporto per ELF e per le librerie condivise. Questo supporto è stato corretto anziché progettato.

(Il secondo linker è BFD ld .)


Il gold linker è stato scritto per rendere il processo di collegamento notevolmente più veloce. Secondo l'autore d'oro Ian Lance Taylor

Al momento l'oro ha un solo vantaggio significativo rispetto al linker esistente:è più veloce. Su grandi programmi C++, ho misurato che funzionava cinque volte più velocemente.

Sta confrontando le prestazioni del gold linker con il tradizionale linker GNU. gold (a differenza del linker GNU) non utilizza la libreria BFD per elaborare i file oggetto.

La limitazione di gold è che (a differenza del linker GNU che può elaborare molti tipi di file oggetto) può collegare solo file oggetto in formato ELF.

Per quanto riguarda i problemi che hai riscontrato durante l'utilizzo del linker GNU, ecco un'interessante risposta a una domanda simile su SO di Michael Adam:

Il gold linker ha anche riscontrato alcuni problemi di dipendenza nel nostro codice, poiché sembra essere più corretto di quello classico rispetto ad alcuni dettagli. Vedi, ad es. questo commit di Samba.


gold contro ld punto di riferimento

Ho pubblicato un benchmark sintetico concreto di ld vs gold su:https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Riepilogo dei risultati:l'oro è stato da 2 a 3 volte più veloce di ld.

Questo guadagno di tempo può essere un enorme punto di svolta su progetti C++ complessi con modelli fuori controllo e generazione di codice, perché la fase di collegamento coinvolge tutti i file del progetto e, a differenza della compilazione, deve essere eseguita sempre, anche se cambi solo un singolo file .cpp.

Quindi un tempo di collegamento lento rende insopportabile il ciclo di sviluppo ed è probabilmente il motivo principale per cui Google ha investito risorse in esso. Immagina solo i guadagni dell'attesa di 10 secondi invece di 30 per ogni banale modifica del file.

I guadagni di tempo del benchmark sintetico concordavano anche con i guadagni effettivi che ho avuto su un complesso progetto del mondo reale (gem5), come menzionato anche in quella risposta.


Linux
  1. Cosa rende Linux il sistema operativo sostenibile

  2. Cosa rende speciale la comunità Linux?

  3. Qual è il significato di *nix?

  4. Qual è il concetto di vruntime in CFS

  5. Qual è l'uso di $# in Bash

Cos'è il comando Linux Watch + Esempi

Che cos'è la shell in Linux?

NVMe vs M.2:qual è la differenza?

iptables vs nftables:qual è la differenza?

Qual è il comando kill in Linux?

Che cos'è la vulnerabilità di Logjam?