Апублікаваны набор патчаў, якія паскараюць зборку ядра Linux на 50-80%.

Інга Молнар (Ingo Molnar), вядомы распрацоўшчык Linux ядра і аўтар планавальніка задач CFS (Completely Fair Scheduler), прапанаваў для абмеркавання ў спісе рассылання распрацоўнікаў ядра Linux серыю патчаў, якія закранаюць больш за палову ўсіх файлаў у зыходных тэкстах ядра і забяспечваюць павелічэнне хуткасці. на 50-80% у залежнасці ад налад. Рэалізаваная аптымізацыя характэрна тым, што яна спалучаная з даданнем самага буйнога ў гісторыі распрацоўкі ядра набору змен - для ўключэння зараз прапанавана 2297 патчаў, якія змяняюць больш за 25 тысяч файлаў (10 тысяч загалоўкавых файлаў у каталогах «include/» і «arch/*/include/ »і 15 тысяч файлаў з зыходнымі тэкстамі).

Прырост прадукцыйнасці дасягаецца за кошт змены метаду апрацоўкі загалоўкавых файлаў. Адзначаецца, што за трыццаць гадоў распрацоўкі ядра стан загалоўкавых файлаў прыняў гнятлівы выгляд з-за наяўнасці вялікай колькасці крыжаваных залежнасцяў паміж файламі. Праца над рэструктурызацыяй загалоўкавых файлаў заняла больш за год і запатрабавала правядзення значнай перапрацоўкі іерархіі і залежнасцяў. Падчас рэструктурызацыі была выканана праца па падзеле азначэнняў тыпаў і API для розных падсістэм ядра.

Сярод унесеных змен: аддзяленне высокаўзроўневых загалоўкавых файлаў сябар ад сябра, выключэнне якія злучаюць загалоўкавыя файлы inline-функцый, вылучэнне загалоўкавых файлаў для тыпаў і API, забеспячэнне адасобленай зборкі загалоўкавых файлаў (каля 80 файлаў мелі якія замінаюць зборцы непрамыя залежнасці, выстаўляныя праз іншыя загалоўкавыя файлы. аўтаматычнае даданне залежнасцяў да файлаў ".h" і ".c", пакрокавая аптымізацыя загалоўкавых файлаў, выкарыстанне рэжыму "CONFIG_KALLSYMS_FAST=y", выбарачная кансалідацыя Сі-файлаў у зборачныя блокі для зніжэння колькасці аб'ектных файлаў.

У выніку, праведзеная праца дазволіла на 1-2 парадку скараціць памер загалоўкавых файлаў, апрацоўваных на стадыі постпрэпрацэсінгу. Напрыклад, да аптымізацыі выкарыстанне загалоўкавых файлаў «linux/gfp.h» прыводзіла да дадання 13543 радкоў кода і падлучэнні 303 залежных загалоўкавых файлаў, а пасля аптымізацыі памер скараціўся да 181 радкоў і 26 залежных файлаў. Або іншы прыклад: пры прэпрацэсінгу файла "kernel/pid.c" без патча падлучаецца 94 тысяч радкоў кода, большая частка якога не выкарыстоўваецца ў pid.c. Падзел загалоўкавых файлаў дазволіла знізіць аб'ём апрацоўванага кода ў тры разы, скараціўшы колькасць апрацоўваных радкоў да 36 тысяч.

Пры поўнай перазборцы ядра камандай make -j96 vmlinux на тэставай сістэм ужыванне патчаў паказала скарачэнне часу зборкі галінкі v5.16-rc7 з 231.34 да 129.97 секунд (з 15.5 да 27.7 зборак у гадзіну), а таксама падвысіла эфектыўнасць выкарыстання ядраў CPU падчас зборкі. Пры інкрыментальнай зборцы эфект ад аптымізацыі яшчэ больш замецены - час паўторнай перазборкі ядра пасля занясення змен у загалоўкавыя файлы скарацілася ў разы (ад 112% да 173% у залежнасці ад змянянага загалоўкавых файла). Аптымізацыі пакуль даступныя толькі для архітэктур ARM64, MIPS, Sparc і x86 (32 – і 64-біт).

Крыніца: opennet.ru

Дадаць каментар