ఇంగో మోల్నార్, సుప్రసిద్ధ లైనక్స్ కెర్నల్ డెవలపర్ మరియు CFS (కంప్లీట్లీ ఫెయిర్ షెడ్యూలర్) టాస్క్ షెడ్యూలర్ రచయిత, 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” కమాండ్తో కెర్నల్ పూర్తిగా పునర్నిర్మించబడినప్పుడు, ప్యాచ్ల అప్లికేషన్ v5.16-rc7 బ్రాంచ్ యొక్క నిర్మాణ సమయాన్ని 231.34 నుండి 129.97 సెకన్లకు (15.5 నుండి 27.7 బిల్డ్లకు) తగ్గించింది. గంటకు), మరియు సమావేశాల సమయంలో CPU కోర్లను ఉపయోగించడం యొక్క సామర్థ్యాన్ని కూడా పెంచింది. పెరుగుతున్న బిల్డ్తో, ఆప్టిమైజేషన్ ప్రభావం మరింత గుర్తించదగినది - హెడర్ ఫైల్లకు మార్పులు చేసిన తర్వాత కెర్నల్ను తిరిగి నిర్మించే సమయం గణనీయంగా తగ్గింది (హెడర్ ఫైల్ మార్చబడడాన్ని బట్టి 112% నుండి 173% వరకు). ఆప్టిమైజేషన్లు ప్రస్తుతం ARM64, MIPS, Sparc మరియు x86 (32- మరియు 64-bit) ఆర్కిటెక్చర్లకు మాత్రమే అందుబాటులో ఉన్నాయి.
మూలం: opennet.ru