it-swarm.com.de

Was ist der Goldlinker?

Hat jemand schon einmal den Linker gold verwendet? Um ein ziemlich großes Projekt zu verknüpfen, musste ich dies im Gegensatz zu GNU ld) verwenden, das einige Fehler verursachte und keine Verknüpfung herstellte.

Wie kann der Linker gold große Projekte verknüpfen, bei denen ld fehlschlägt? Gibt es irgendwo eine Art Gedächtnistrick?

25
placid chat

Der Linker gold wurde als ELF-spezifischer Linker entwickelt, um einen wartbareren und schnelleren Linker als BFD ld (der „traditionelle“ GNU) herzustellen = binutils linker). Als Nebeneffekt ist es tatsächlich möglich, sehr große Programme mit weniger Speicher als BFD ld zu verknüpfen, vermutlich weil weniger Abstraktionsebenen zu behandeln sind und weil die Datenstrukturen des Linkers direkter dem ELF-Format zuordnen.

Ich bin mir nicht sicher, ob es eine umfangreiche Dokumentation gibt, die speziell auf die Designunterschiede zwischen den beiden Linkern und deren Auswirkungen auf die Speichernutzung eingeht. Es gibt eine sehr interessante Reihe von Artikeln über Linker von Ian Lance Taylor, dem Autor der verschiedenen GNU Linker, die viele der Entwurfsentscheidungen erklärt, die zu gold. Er schreibt das

Der Linker, an dem ich gerade arbeite, heißt Gold und wird mein dritter sein. Es ist ausschließlich ein ELF-Linker. Wieder einmal ist das Ziel Geschwindigkeit, in diesem Fall schneller als mein zweiter Linker. Dieser Linker wurde im Laufe der Jahre durch die Unterstützung von ELF und gemeinsam genutzten Bibliotheken erheblich verlangsamt. Diese Unterstützung wurde gepatcht und nicht entworfen.

(Der zweite Linker ist BFD ld.)

27
Stephen Kitt

Der Gold-Linker wurde geschrieben, um den Link-Prozess erheblich zu beschleunigen. Laut dem Goldautor Ian Lance Taylor

Derzeit hat Gold nur einen wesentlichen Vorteil gegenüber dem vorhandenen Linker: Es ist schneller. Bei großen C++ - Programmen habe ich gemessen, dass es fünfmal schneller läuft.

Er vergleicht die Leistung von Gold-Linkern mit dem traditionellen Linker GNU Linker. Gold (im Gegensatz zum Linker GNU Linker) verwendet die BFD-Bibliothek nicht zur Verarbeitung von Objektdateien.

Die Einschränkung von Gold besteht darin, dass es (im Gegensatz zu GNU Linker, der viele Objektdateitypen verarbeiten kann) nur Objektdateien im ELF-Format verknüpfen kann.

In Bezug auf die Probleme, mit denen Sie bei der Verwendung von GNU Linker) konfrontiert waren, finden Sie hier eine interessante Antwort auf eine ähnliche Frage zu SO von Michael Adam:

Der Goldlinker hat sogar einige Abhängigkeitsprobleme in unserem Code gefunden, da er in einigen Details korrekter zu sein scheint als der klassische. Siehe z. diese Samba begehen.

13
suspectus

gold vs ld Benchmark

Ich habe einen konkreten synthetischen Benchmark von ld gegen Gold veröffentlicht unter: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#5392126

Zusammenfassung der Ergebnisse: Gold war 2x bis 3x schneller als ld.

Dieser Zeitgewinn kann bei komplexen C++ - Projekten mit außer Kontrolle geratenen Vorlagen und Codegenerierung eine große Veränderung bedeuten, da der Verknüpfungsschritt alle Dateien aus dem Projekt umfasst und im Gegensatz zur Kompilierung immer durchgeführt werden muss, auch wenn Sie Änderungen vornehmen nur eine einzige CPP-Datei.

Eine langsame Verbindungszeit macht den Entwicklungszyklus unerträglich und ist wahrscheinlich der Hauptgrund, warum Google Ressourcen in ihn gesteckt hat. Stellen Sie sich vor, Sie müssen 10 statt 30 Sekunden auf jede triviale Dateiänderung warten.

Die Zeitgewinne des synthetischen Benchmarks stimmten auch mit den tatsächlichen Gewinnen überein, die ich bei einem komplexen realen Projekt (gem5) hatte, wie auch in dieser Antwort erwähnt.

Auf modernen GNU/Linux-Systemen stehen drei Linker zur Verfügung:

  • ld , gepflegt von GNU binutils,
  • Gold , gepflegt von GNU binutils, "noch im Beta-Test",
  • lld , entwickelt im Rahmen des LLVM-Projekts.

Informationen zu Geschwindigkeitsbenchmarks finden Sie unter: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld ist am schnellsten , gefolgt von gold, gefolgt von ld

Einige Quellen sagen, dass das Goldprojekt stagniert war, und die Paketstruktur in Fedora spiegelt dies wider.

1
Syfer Polski