GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Goldlinker?

Der gold Linker wurde als ein ELF-spezifischer Linker entwickelt, mit der Absicht, einen besser wartbaren und schnelleren Linker als BFD ld zu produzieren (der „traditionelle“ GNU-Binutils-Linker). Als Nebeneffekt ist es tatsächlich in der Lage, sehr große Programme zu linken, die weniger Speicher benötigen als BFD ld , vermutlich, weil es weniger Abstraktionsebenen zu bewältigen gilt und weil die Datenstrukturen des Linkers direkter auf das ELF-Format abgebildet werden.

Ich bin mir nicht sicher, ob es viele Dokumentationen gibt, die sich speziell mit den Designunterschieden zwischen den beiden Linkern und ihren Auswirkungen auf die Speichernutzung befassen. Es gibt eine sehr interessante Artikelserie über Linker von Ian Lance Taylor, dem Autor der verschiedenen GNU-Linker, die viele der Designentscheidungen erklärt, die zu gold geführt haben . Das schreibt er

Der Linker, an dem ich jetzt arbeite, namens Gold, wird mein dritter sein. Es handelt sich ausschließlich um einen ELF-Linker. Auch hier ist das Ziel Geschwindigkeit, in diesem Fall schneller als mein zweiter Linker. Dieser Linker wurde im Laufe der Jahre erheblich verlangsamt, indem Unterstützung für ELF und gemeinsam genutzte Bibliotheken hinzugefügt wurde. Diese Unterstützung wurde nicht eingebaut, sondern gepatcht.

(Der zweite Linker ist BFD ld .)


Der Gold-Linker wurde geschrieben, um den Verknüpfungsprozess erheblich zu beschleunigen. Laut dem Goldautor Ian Lance Taylor

Im Moment hat Gold nur einen entscheidenden Vorteil gegenüber den bestehenden Linkern:Es ist schneller. Bei großen C++-Programmen habe ich gemessen, dass es fünfmal schneller läuft.

Er vergleicht die Leistung des Gold-Linkers mit dem traditionellen GNU-Linker. Gold verwendet (anders als der GNU-Linker) nicht die BFD-Bibliothek, um Objektdateien zu verarbeiten.

Die Einschränkung von Gold besteht darin, dass es (im Gegensatz zum 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-Linkern konfrontiert waren, finden Sie hier eine interessante Antwort auf eine ähnliche Frage zu SO von Michael Adam:

Der Gold-Linker hat sogar einige Abhängigkeitsprobleme in unserem Code gefunden, da er in einigen Details korrekter zu sein scheint als der klassische. Siehe z.B. dieses Samba-Commit.


gold vs. ld Benchmark

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

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

Dieser Zeitgewinn kann bei komplexen C++-Projekten mit außer Kontrolle geratenen Vorlagen und Codegenerierung ein großer Spielveränderer sein, da der Verknüpfungsschritt alle Dateien aus dem Projekt umfasst und im Gegensatz zur Kompilierung immer durchgeführt werden muss, auch wenn Sie sich ändern nur eine einzelne .cpp-Datei.

Eine langsame Verbindungszeit macht den Entwicklungszyklus also unerträglich und ist wahrscheinlich der Hauptgrund dafür, dass Google Ressourcen darin investiert hat. Stellen Sie sich nur vor, wie vorteilhaft es wäre, bei jeder trivialen Dateiänderung 10 statt 30 Sekunden zu 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.


Linux
  1. Was Linux zum nachhaltigen Betriebssystem macht

  2. Was macht die Linux-Community besonders?

  3. Linux vs. Unix:Was ist der Unterschied?

  4. Was ist der aktuelle Runlevel des Linux-Systems?

  5. Was bedeutet *nix?

Was ist der Linux-Überwachungsbefehl + Beispiele

Was ist die Shell unter Linux?

NVMe vs. M.2:Was ist der Unterschied?

iptables vs. nftables:Was ist der Unterschied?

Was ist der Kill-Befehl in Linux?

Was ist die Logjam-Schwachstelle?