ఇంగో మోల్నార్, ఒక ప్రఖ్యాత డెవలపర్ Linux కెర్నల్ మరియు CFS (కంప్లీట్లీ ఫెయిర్ షెడ్యూలర్) టాస్క్ షెడ్యూలర్ రచయిత, కెర్నల్ డెవలపర్స్ మెయిలింగ్ లిస్ట్లో దీనిని చర్చ కోసం ప్రతిపాదించారు. Linux కెర్నల్ సోర్స్ కోడ్లోని సగానికి పైగా ఫైళ్లను ప్రభావితం చేసే ప్యాచ్ల శ్రేణి, సెట్టింగ్లను బట్టి పూర్తి కెర్నల్ రీబిల్డ్ల వేగాన్ని 50-80% పెంచుతుంది. ఈ ఆప్టిమైజేషన్ ముఖ్యమైనది, ఎందుకంటే ఇది కెర్నల్ అభివృద్ధి చరిత్రలోనే అతిపెద్ద మార్పుల సమితిని కలిగి ఉంది—ఒకేసారి చేర్చడానికి ప్రతిపాదించబడిన 2297 ప్యాచ్లు, 25 కంటే ఎక్కువ ఫైళ్లను ("include/" మరియు "arch/*/include/" డైరెక్టరీలలోని 10 హెడర్ ఫైళ్లు మరియు 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" కమాండ్ను ఉపయోగించి పూర్తి కెర్నల్ రీబిల్డ్ను అమలు చేసినప్పుడు, ప్యాచ్లను వర్తింపజేయడం వలన v5.16-rc7 బ్రాంచ్ యొక్క బిల్డ్ సమయం 231.34 నుండి 129.97 సెకన్లకు (గంటకు 15.5 నుండి 27.7 బిల్డ్లకు) తగ్గింది, మరియు బిల్డ్ సమయంలో CPU కోర్ వినియోగ సామర్థ్యం కూడా పెరిగింది. ఇంక్రిమెంటల్ బిల్డ్లతో, ఆప్టిమైజేషన్ ప్రభావం మరింత స్పష్టంగా కనిపిస్తుంది: హెడర్ ఫైల్స్లో మార్పులు చేసిన తర్వాత కెర్నల్ను రీబిల్డ్ చేయడానికి పట్టే సమయం గణనీయంగా తగ్గింది (సవరించబడిన హెడర్ ఫైల్ను బట్టి 112% నుండి 173%కి). ఆప్టిమైజేషన్లు ప్రస్తుతం ARM64, MIPS, Sparc, మరియు x86 (32- మరియు 64-బిట్) ఆర్కిటెక్చర్లకు మాత్రమే అందుబాటులో ఉన్నాయి.
మూలం: opennet.ru
