GNU/Linux >> Znalost Linux >  >> Linux

Co je zlatý linker?

gold linker byl navržen jako linker specifický pro ELF se záměrem vytvořit lépe udržovatelný a rychlejší linker než BFD ld ("tradiční" GNU binutils linker). Vedlejším efektem je, že je skutečně schopen propojit velmi velké programy s využitím méně paměti než BFD ld , pravděpodobně proto, že existuje méně vrstev abstrakce, s nimiž je třeba se vypořádat, a protože datové struktury linkeru se příměji mapují do formátu ELF.

Nejsem si jistý, že existuje mnoho dokumentace, která se konkrétně zabývá konstrukčními rozdíly mezi dvěma linkery a jejich vlivem na využití paměti. Existuje velmi zajímavá série článků o linkerech od Iana Lance Taylora, autora různých GNU linkerů, která vysvětluje mnohá rozhodnutí o designu vedoucí k gold . Píše, že

Linker, na kterém nyní pracuji, zvaný zlato, bude můj třetí. Je to výhradně ELF linker. Ještě jednou, cílem je rychlost, v tomto případě rychlejší než můj druhý linker. Tento linker byl v průběhu let výrazně zpomalen přidáním podpory pro ELF a sdílené knihovny. Tato podpora byla spíše záplatována, než aby byla navržena.

(Druhý linker je BFD ld .)


Gold linker byl napsán tak, aby byl proces propojení podstatně rychlejší. Podle zlatého autora Iana Lance Taylora

V současné době má zlato oproti stávajícímu linkeru pouze jednu významnou výhodu:je rychlejší. U velkých programů C++ jsem zjistil, že běží pětkrát rychleji.

Porovnává výkon zlatého linkeru s tradičním GNU linkerem. gold (na rozdíl od GNU linkeru) nepoužívá knihovnu BFD ke zpracování objektových souborů.

Omezení zlata je v tom, že (na rozdíl od GNU linkeru, který dokáže zpracovat mnoho typů objektových souborů) dokáže propojit pouze objektové soubory ve formátu ELF.

Pokud jde o problémy, se kterými jste se potýkali při používání GNU linkeru, zde je zajímavá odpověď na podobnou otázku o SO od Michaela Adama:

Gold linker dokonce našel v našem kódu nějaké problémy se závislostmi, protože se zdá být s ohledem na některé detaily správnější než klasický. Viz např. tento závazek Samba.


gold vs ld benchmarka

Zveřejnil jsem konkrétní syntetický benchmark ld vs gold na:https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Shrnutí výsledků:zlato bylo 2x až 3x rychlejší než ld.

Tento časový zisk může být obrovskou změnou hry na komplexních projektech C++ s nekontrolovatelnými šablonami a generováním kódu, protože krok odkazu zahrnuje všechny soubory z projektu a na rozdíl od kompilace musí být proveden vždy, i když změníte pouze jeden soubor .cpp.

Pomalá doba propojení tedy činí vývojový cyklus neúnosným a je pravděpodobně hlavním důvodem, proč do něj Google utopil zdroje. Jen si představte, jaké výhody přináší čekání 10 s místo 30 s na každou triviální změnu souboru.

Časové zisky syntetického benchmarku také souhlasily se skutečnými zisky, které jsem měl na komplexním projektu v reálném světě (gem5), jak je také uvedeno v této odpovědi.


Linux
  1. Jaký je trik LD_PRELOAD?

  2. Co znamená POSIX?

  3. Jaký je koncept vruntime v CFS

  1. Co dělá Linux udržitelným OS

  2. Co je to souborový systém NSFS?

  3. Jaký je uživatel debian-+?

  1. Čím je linuxová komunita výjimečná?

  2. Linux vs. Unix:Jaký je rozdíl?

  3. Jaká je aktuální úroveň běhu systému Linux?