Talált teljesítmény: Clang + LTO-val fordított Linux kernel

Mi történik akkor, ha elrugaszkodunk a megszokott GCC-től és inkább az LLVM Clang-re bízzuk a Linux kernel fordítását? Az LTO bekapcsolása segít vagy csak a fordítást lassítja?

Tux ikon
Tux ikon

Mi történik akkor, ha elrugaszkodunk a megszokott GCC-től és inkább az LLVM Clang-re bízzuk a Linux kernel fordítását? Az LTO bekapcsolása segít vagy csak a fordítást lassítja?

A Phoronix letesztelte, hogy jelent-e a teljesítményelőnyt és ha igen, akkor mennyit, ha a Linux kernelt nem a megszokott GCC-vel fordítjuk, hanem Clang-el, illetve hogy az LTO bekapcsolása jelent-e valamit.

Az LTO azaz Link Time Optimization röviden egy olyan optimalizációs megoldás, mely az egész alkalmazást áttekintve végzi el az optimalizációt, ezért hatékonyabb mint a klasszikus, modul szintű optimalizáció.

Tesztben szereplő alkalmazásverziók:

  • Linux: 6.19 (Git)
  • GCC 15.2
  • LLVM Clang 21.1.7

A teszt során összesen 163 különböző mérés történt. Az eredmények sokszor szinte mérési hibahatáron belül vannak egymáshoz képest és vegyes felhasználást feltételezve szinte mindegy is, hogy GCC, Clang vagy Clang + LTO-val került a kernel fordításra.

Ugyanakkor van néhány olyan feladatspecifikus eredmény, ahol jelentősebb lehet az előny: nginx, PostgreSQL, Memcached. Különösen teljesítményérzékeny esetekben, valószínűleg elgondolkodnék azon, hogy a PostgreSQL szerverre Clang + LTO-val újrafordítsam a disztribúció kernelét.

Grafikon: memcached eredmény: leggyorsabb a sima Clang-gal fordított, majd Clang + LTO végül a GCC jön

 

Grafikon: nginx mérés: Clang a leggyorsabb mint az Clang + LTO követ és a GCC az utolsó

Grafikon: PostgreSQL írás - olvasás mérés: a Clang + LTO páros az első, jelentős előnnyel, amit az LTO nélküli célang követ, a GCC itt is az utolsó helyen van

 

Grafikon: PostgreSQL írás - olvasás késleltetés: Clang + LTO az első helyen, amit a Clang majd a GCC követ

Összegezve az eredményeket: bizonyos esetekben megérheti a Clang + LTO használata, de nem mindig. Ne feledjük, hogy ha bármilyen módon eltérünk a disztribúciónk által szállított kerneltől, akkor annak a frissen tartásának a terhe a mi vállunkat fogja nyomni.

Grafikon: mérések összegzése: minimális különbséggel a Clang + LTO a leggyorsabb, amit a Clang 21 követ, a sor végén pedig a GCC áll

A teljes teszt a Phoronix oldalon olvasható: https://www.phoronix.com/review/linux-kernel-llvm-clang-lto