Az LLVM DTLTO-ja most hatékonyabban ad fájlokat a linkeléshez, jóval nagyobb teljesítményért

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

Tavaly Ben Dunbobbin egy olyan fejlesztést készített, amely gyorsítja a DTLTO-val végzett linkelést, amikor fájlokat kell hozzáadni a linkhez. Szélsőséges esetben, Windows alatt egy AMD Ryzen 16 magos processzoron egy fájl hozzáadása a linkhez nagyjából 2799 ms-ig tartott, az azóta beolvasztott kóddal viszont ez 157 ms-ra csökkent. Linux alatt a patch körülbelül 255 ms-ról nagyjából 41 ms-ra viszi le az időt.

Ben a patch teljesítményjavulásáról így írt:

"A folyamaton belüli ThinLTO backend jellemzően memóriában állítja elő az object fájlokat, és közvetlenül hozzáadja őket a linkeléshez, kivéve, ha használják a ThinLTO cache-t. A DTLTO ebből a szempontból szokatlan, mert minden esetben lemezről ad hozzá fájlokat a linkeléshez.

Ha nem használják a ThinLTO cache-t, a ThinLTO a linker által biztosított AddStreamFn callbacken keresztül adja hozzá a fájlokat, ami végül egy SmallVector végére fűz az LLD-ben. Ha használják a cache-t, a linker egy AddBufferFn callbacket ad, amely hatékonyabban adja hozzá a fájlokat (a MemoryBuffer tulajdonjogának átvételével).

Ez a patch lehetővé teszi, hogy a kliensek opcionálisan AddBufferFn callbacket adjanak a DTLTO ThinLTO backendnek. Ha ez elérhető, a backend ezt használja, hogy hatékonyabban adja hozzá a fájlokat a linkeléshez.

Egy Clang link (debug build sanitizers és instrumentáció mellett) optimalizált toolchainnel (PGO non-LTO, llvmorg-22.1.0) mérve az Add DTLTO files to the link időtrace scope átlagos időtartamát:

- Windows alatt (Windows 11 Pro Build 26200, AMD Family 25 @ ~4.5 GHz, 16 mag/32 szál, 64 GB RAM) ez a patch 2799.148 ms-ról 157.972 ms-ra csökkenti az átlagot.

- Linux alatt (Ubuntu 24.04.3 LTS kernel 6.14, Ryzen 9 5950X, 16 mag/32 szál, boost akár 5.09 GHz, 64 GB RAM) ez a patch 255.291 ms-ról 41.630 ms-ra csökkenti az átlagot."

Az LLVM/Clang 23-ban ehhez a változáshoz elég volt néhány tucat sornyi kódot átdolgozni, mégis arányaiban nagyon nagy gyorsulást hozott.