Հրապարակվել է մի շարք patches, որոնք արագացնում են Linux միջուկի կառուցումը 50-80%-ով

Ինգո Մոլնարը, Linux միջուկի հայտնի մշակող և CFS (Completely Fair Scheduler) առաջադրանքների ժամանակացույցի հեղինակ, առաջարկել է Linux միջուկի մշակողների փոստային ցուցակում քննարկման համար մի շարք պատչեր, որոնք ազդում են միջուկի աղբյուրների բոլոր ֆայլերի կեսից ավելիին և ապահովել ամբողջական միջուկի վերակառուցման արագության բարձրացում 50-80%-ով՝ կախված կարգավորումներից: Իրականացված օպտիմալացումը հատկանշական է նրանով, որ այն կապված է միջուկի զարգացման պատմության մեջ փոփոխությունների ամենամեծ փաթեթի ավելացման հետ. ներառման համար առաջարկվել է միանգամից 2297 պատչ՝ փոխելով ավելի քան 25 հազար ֆայլ (10 հազար վերնագրի ֆայլեր «ներառյալ /» և «arch/*/include/» գրացուցակներ «և 15 հազար ֆայլ՝ սկզբնաղբյուր տեքստերով):

Արդյունավետության ձեռքբերումը ձեռք է բերվում վերնագրի ֆայլերի մշակման մեթոդի փոփոխությամբ: Նշվում է, որ միջուկի մշակման ավելի քան երեսուն տարիների ընթացքում վերնագրի ֆայլերի վիճակը վհատեցնող տեսք է ստացել ֆայլերի միջև մեծ թվով խաչաձև կախվածությունների առկայության պատճառով: Վերնագրի ֆայլի վերակառուցումը տևեց ավելի քան մեկ տարի և պահանջեց հիերարխիայի և կախվածությունների զգալի վերամշակում: Վերակազմավորման ընթացքում աշխատանքներ են տարվել միջուկի տարբեր ենթահամակարգերի համար տիպերի սահմանումներ և API-ներ առանձնացնելու ուղղությամբ:

Կատարված փոփոխություններից են՝ բարձր մակարդակի վերնագրի ֆայլերը միմյանցից առանձնացնելը, վերնագրի ֆայլերը կապող ներդիրային ֆունկցիաների վերացում, տիպերի և API-ների համար վերնագրերի ֆայլերի առանձնացում, վերնագրի ֆայլերի առանձին հավաքման ապահովում (մոտ 80 ֆայլ ունեին անուղղակի կախվածություններ, որոնք խանգարում էին հավաքմանը, բացահայտված այլ վերնագրի ֆայլեր), «.h» և «.c» ֆայլերին կախվածությունների ավտոմատ ավելացում, վերնագրի ֆայլերի քայլ առ քայլ օպտիմիզացում, «CONFIG_KALLSYMS_FAST=y» ռեժիմի օգտագործում, C ֆայլերի ընտրովի համախմբում հավաքման բլոկների մեջ: նվազեցնել օբյեկտների ֆայլերի քանակը:

Արդյունքում կատարված աշխատանքը հնարավորություն է տվել 1-2 կարգով նվազեցնել հետնախամշակման փուլում մշակված վերնագրի ֆայլերի չափը։ Օրինակ, մինչ օպտիմիզացումը «linux/gfp.h» վերնագրի ֆայլի օգտագործումը հանգեցրեց 13543 տող կոդի ավելացման և 303 կախված վերնագրի ֆայլի ներառմանը, իսկ օպտիմալացումից հետո չափը կրճատվեց մինչև 181 տող և 26 կախված ֆայլ: Կամ մեկ այլ օրինակ՝ «kernel/pid.c» ֆայլը առանց կարկատակի նախապես մշակելիս ներառվում է 94 հազար տող կոդ, որոնց մեծ մասը չի օգտագործվում pid.c-ում։ Վերնագրի ֆայլերի առանձնացումը հնարավորություն է տվել երեք անգամ կրճատել մշակված կոդի քանակը՝ մշակված տողերի թիվը հասցնելով 36 հազարի։

Երբ միջուկն ամբողջությամբ վերակառուցվեց «make -j96 vmlinux» հրամանով թեստային համակարգում, patches-ի կիրառումը ցույց տվեց v5.16-rc7 ճյուղի կառուցման ժամանակի կրճատում 231.34-ից մինչև 129.97 վայրկյան (15.5-ից մինչև 27.7 կառուցում): ժամում), ինչպես նաև մեծացրել է պրոցեսորի միջուկների օգտագործման արդյունավետությունը հավաքների ժամանակ: Աճող կառուցման դեպքում օպտիմալացման էֆեկտն էլ ավելի նկատելի է. վերնագրի ֆայլերում փոփոխություններ կատարելուց հետո միջուկը վերակառուցելու ժամանակը զգալիորեն նվազել է (112%-ից մինչև 173%՝ կախված փոփոխվող վերնագրի ֆայլից): Օպտիմալացումները ներկայումս հասանելի են միայն ARM64, MIPS, Sparc և x86 (32 և 64 բիթ) ճարտարապետությունների համար:

Source: opennet.ru

Добавить комментарий