Ġie ppubblikat sett ta’ garżi li jħaffu l-bini tal-qalba tal-Linux b’50-80%

Ingo Molnar, żviluppatur tal-kernel Linux magħruf u awtur tal-iskedar tal-kompiti CFS (Completely Fair Scheduler), ippropona għal diskussjoni fuq il-lista tal-posta tal-iżviluppaturi tal-kernel Linux serje ta’ garża li jaffettwaw aktar minn nofs il-fajls kollha fis-sorsi tal-kernel u jipprovdu żieda fil-veloċità ta 'bini mill-ġdid tal-qalba kompluta b'50-80% skont is-settings. L-ottimizzazzjoni implimentata hija notevoli peress li hija assoċjata maż-żieda tal-akbar sett ta 'bidliet fl-istorja tal-iżvilupp tal-qalba - ġew proposti 2297 garża għall-inklużjoni f'daqqa, li jinbidlu aktar minn 25 elf fajl (10 elf fajl header fil-"inkludi /” u “arch/*/include/” direttorji “u 15-il elf fajl bit-testi tas-sors).

Il-qligħ tal-prestazzjoni jinkiseb billi jinbidel il-metodu tal-ipproċessar tal-fajls tal-header. Huwa nnutat li fuq tletin sena ta 'żvilupp tal-qalba, l-istat tal-fajls header ħa dehra deprimenti minħabba l-preżenza ta' numru kbir ta 'dipendenzi inkroċjati bejn il-fajls. Ir-ristrutturar tal-fajl header ħa aktar minn sena u kien jeħtieġ ħidma mill-ġdid sinifikanti tal-ġerarkija u tad-dipendenzi. Matul ir-ristrutturar, sar xogħol biex jiġu separati definizzjonijiet tat-tip u APIs għal sottosistemi differenti tal-qalba.

Fost il-bidliet li saru: separazzjoni ta' fajls header ta' livell għoli minn xulxin, eliminazzjoni ta' funzjonijiet inline li jgħaqqdu fajls header, separazzjoni ta' fajls header għal tipi u APIs, assigurazzjoni ta' assemblaġġ separat ta' fajls header (madwar 80 fajl kellhom dipendenzi indiretti li jinterferixxu mal-assemblaġġ, esposti permezz fajls header oħra), żieda awtomatika ta 'dipendenzi għal fajls ".h" u ".c", ottimizzazzjoni pass pass ta' fajls header, użu tal-mod "CONFIG_KALLSYMS_FAST=y", konsolidazzjoni selettiva ta 'fajls C fi blokki ta' assemblaġġ biex tnaqqas in-numru ta 'fajls ta' oġġetti.

Bħala riżultat, ix-xogħol li sar għamilha possibbli li jitnaqqas id-daqs tal-fajls header ipproċessati fl-istadju ta 'wara l-ipproċessar minn qabel b'1-2 ordnijiet ta' kobor. Pereżempju, qabel l-ottimizzazzjoni, l-użu tal-fajl header "linux/gfp.h" irriżulta fiż-żieda ta '13543 linja ta' kodiċi u l-inklużjoni ta 'fajls header dipendenti 303, u wara l-ottimizzazzjoni d-daqs tnaqqas għal 181 linja u 26 fajl dipendenti. Jew eżempju ieħor: meta tipproċessa minn qabel il-fajl "kernel/pid.c" mingħajr garża, 94 elf linja ta 'kodiċi huma inklużi, li ħafna minnhom ma jintużax f'pid.c. Is-separazzjoni tal-fajls tal-header għamilha possibbli li jitnaqqas l-ammont ta 'kodiċi pproċessat bi tliet darbiet, tnaqqas in-numru ta' linji pproċessati għal 36 elf.

Meta l-qalba nbniet kompletament mill-ġdid bil-kmand "make -j96 vmlinux" fuq sistema tat-test, l-applikazzjoni tal-garża wriet tnaqqis fil-ħin tal-bini tal-fergħa v5.16-rc7 minn 231.34 għal 129.97 sekondi (minn 15.5 sa 27.7 bini fis-siegħa), u żiedet ukoll l-effiċjenza tal-użu tal-qlub tas-CPU waqt l-assemblaġġi. B'bini inkrementali, l-effett ta 'ottimizzazzjoni huwa saħansitra aktar notevoli - iż-żmien biex terġa' tinbena l-qalba wara li jsiru bidliet fil-fajls header naqas b'mod sinifikanti (minn 112% għal 173% skont il-fajl header li qed jinbidel). L-ottimizzazzjonijiet bħalissa huma disponibbli biss għall-arkitetturi ARM64, MIPS, Sparc u x86 (32- u 64-bit).

Sors: opennet.ru

Żid kumment