Egy sor javítást tettek közzé, amelyek 50-80%-kal felgyorsítják a Linux kernel felépítését

Ingo Molnar, a jól ismert Linux kernel fejlesztő és a CFS (Completely Fair Scheduler) feladatütemező szerzője megvitatásra javasolta a Linux kernel fejlesztői levelezőlistáján egy sor javítást, amelyek a kernelforrásokban található fájlok több mint felét érintik. a beállításoktól függően 50-80%-kal növeli a teljes kernel-újraépítés sebességét. A végrehajtott optimalizálás figyelemre méltó, mivel a kernelfejlesztés történetének legnagyobb változásainak hozzáadásával jár - egyszerre 2297 javítást javasoltak a felvételre, amelyek több mint 25 ezer fájlt változtattak meg (10 ezer fejlécfájl az „include /” és „arch/*/include/” könyvtárak "és 15 ezer fájl forrásszövegekkel).

A teljesítménynövekedés a fejlécfájlok feldolgozási módjának megváltoztatásával érhető el. Meg kell jegyezni, hogy a kernelfejlesztés harminc éve alatt a fejlécfájlok állapota lehangoló megjelenést öltött a fájlok közötti nagyszámú keresztfüggőség miatt. A fejlécfájl átstrukturálása több mint egy évig tartott, és jelentős átdolgozást igényelt a hierarchiában és a függőségekben. Az átalakítás során a különböző kernel-alrendszerekhez tartozó típusdefiníciók és API-k szétválasztására törekedtek.

A végrehajtott változtatások között szerepel: a magas szintű fejlécfájlok elválasztása egymástól, a fejlécfájlokat összekapcsoló soron belüli funkciók megszüntetése, a fejlécfájlok típusok és API-k szerinti szétválasztása, a fejlécfájlok külön összeállításának biztosítása (kb. 80 fájlnál voltak közvetett függőségek, amelyek zavarták az összeállítást, kitéve egyéb fejlécfájlok), függőségek automatikus hozzáadása a „.h” és „.c” fájlokhoz, a fejlécfájlok lépésről lépésre történő optimalizálása, a „CONFIG_KALLSYMS_FAST=y” mód használata, a C fájlok szelektív konszolidálása összeállítási blokkokban csökkentse az objektumfájlok számát.

Ennek eredményeként az elvégzett munka lehetővé tette az utófeldolgozási szakaszban feldolgozott fejlécfájlok méretének 1-2 nagyságrenddel történő csökkentését. Például az optimalizálás előtt a „linux/gfp.h” fejlécfájl használata 13543 kódsor hozzáadását és 303 függő fejlécfájl beillesztését eredményezte, az optimalizálás után pedig a méret 181 sorra és 26 függő fájlra csökkent. Vagy egy másik példa: a „kernel/pid.c” fájl javítás nélküli előfeldolgozása során 94 ezer sornyi kód kerül bele, amelyek nagy részét a pid.c nem használja. A fejlécfájlok szétválasztása lehetővé tette a feldolgozott kód mennyiségének háromszorosát, így a feldolgozott sorok száma 36 ezerre csökkent.

Amikor a kernelt teljesen átépítették a „make -j96 vmlinux” paranccsal egy tesztrendszeren, a javítások alkalmazása azt mutatta, hogy a v5.16-rc7 ág felépítési ideje 231.34-ről 129.97 másodpercre csökkent (15.5-ről 27.7-re). óránként), valamint növelte a CPU magok használatának hatékonyságát az összeszerelések során. A növekményes felépítéssel az optimalizálás hatása még szembetűnőbb – a fejlécfájlok módosítása után a kernel újraépítésének ideje jelentősen lecsökkent (112%-ról 173%-ra a módosítandó fejlécfájltól függően). Az optimalizálás jelenleg csak az ARM64, MIPS, Sparc és x86 (32 és 64 bites) architektúrákhoz érhető el.

Forrás: opennet.ru

Hozzászólás