Mae set o glytiau wedi'u cyhoeddi sy'n cyflymu'r broses o adeiladu'r cnewyllyn Linux 50-80%

Cynigiodd Ingo Molnar, datblygwr cnewyllyn Linux adnabyddus ac awdur trefnydd tasgau CFS (Gompletely Fair Scheduler), i'w drafod ar restr bostio datblygwr cnewyllyn Linux gyfres o glytiau sy'n effeithio ar fwy na hanner yr holl ffeiliau yn y ffynonellau cnewyllyn a darparu cynnydd yng nghyflymder ailadeiladu cnewyllyn cyflawn 50-80% yn dibynnu ar leoliadau. Mae'r optimeiddio a weithredwyd yn nodedig gan ei fod yn gysylltiedig ag ychwanegu'r set fwyaf o newidiadau yn hanes datblygiad cnewyllyn - cynigiwyd cynnwys 2297 o glytiau ar unwaith, gan newid mwy na 25 mil o ffeiliau (10 mil o ffeiliau pennawd yn y "cynnwys /” a “arch/*/ include/” cyfeiriaduron” a 15 mil o ffeiliau gyda thestunau ffynhonnell).

Cyflawnir y cynnydd perfformiad trwy newid y dull o brosesu ffeiliau pennawd. Nodir, dros ddeng mlynedd ar hugain o ddatblygiad cnewyllyn, fod cyflwr y ffeiliau pennawd wedi cymryd golwg ddigalon oherwydd presenoldeb nifer fawr o draws-ddibyniaethau rhwng ffeiliau. Cymerodd yr ailstrwythuro ffeil pennawd dros flwyddyn ac roedd angen ailwampio'r hierarchaeth a'r dibyniaethau yn sylweddol. Yn ystod yr ailstrwythuro, gwnaethpwyd gwaith i wahanu diffiniadau math ac APIs ar gyfer gwahanol is-systemau cnewyllyn.

Ymhlith y newidiadau a wnaed: gwahanu ffeiliau pennawd lefel uchel oddi wrth ei gilydd, dileu swyddogaethau mewnol sy'n cysylltu ffeiliau pennawd, gwahanu ffeiliau pennawd ar gyfer mathau ac APIs, sicrhau cydosod ffeiliau pennawd ar wahân (roedd gan tua 80 o ffeiliau ddibyniaethau anuniongyrchol yn ymyrryd â chynulliad, wedi'u hamlygu trwy ffeiliau pennyn eraill), ychwanegu dibyniaethau'n awtomatig at ffeiliau “.h” a “.c”, optimeiddio ffeiliau pennawd cam wrth gam, defnyddio'r modd “CONFIG_KALLSYMS_FAST=y”, cyfuno detholus o ffeiliau C yn flociau cydosod i lleihau nifer y ffeiliau gwrthrych.

O ganlyniad, roedd y gwaith a wnaed yn ei gwneud hi'n bosibl lleihau maint y ffeiliau pennawd a broseswyd yn y cam ôl-brosesu o 1-2 archeb maint. Er enghraifft, cyn optimeiddio, arweiniodd defnyddio'r ffeil pennawd “linux/gfp.h” at ychwanegu 13543 o linellau cod a chynnwys 303 o ffeiliau pennawd dibynnol, ac ar ôl optimeiddio gostyngwyd y maint i 181 llinell a 26 o ffeiliau dibynnol. Neu enghraifft arall: wrth ragbrosesu'r ffeil “kernel/pid.c” heb ddarn, mae 94 mil o linellau o god wedi'u cynnwys, ac ni ddefnyddir y rhan fwyaf ohonynt yn pid.c. Roedd gwahanu'r ffeiliau pennawd yn ei gwneud hi'n bosibl lleihau faint o god wedi'i brosesu dair gwaith, gan leihau nifer y llinellau wedi'u prosesu i 36 mil.

Pan ailadeiladwyd y cnewyllyn yn llwyr gyda'r gorchymyn “gwneud -j96 vmlinux” ar system brawf, dangosodd cymhwyso clytiau ostyngiad yn amser adeiladu cangen v5.16-rc7 o 231.34 i 129.97 eiliad (o 15.5 i 27.7 adeiladu yr awr), a hefyd wedi cynyddu effeithlonrwydd defnyddio creiddiau CPU yn ystod gwasanaethau. Gydag adeiladu cynyddrannol, mae effaith optimeiddio hyd yn oed yn fwy amlwg - mae'r amser i ailadeiladu'r cnewyllyn ar ôl gwneud newidiadau i'r ffeiliau pennawd wedi gostwng yn sylweddol (o 112% i 173% yn dibynnu ar newid y ffeil pennawd). Ar hyn o bryd dim ond ar gyfer pensaernïaeth ARM64, MIPS, Sparc a x86 (32- a 64-bit) y mae optimeiddiadau ar gael.

Ffynhonnell: opennet.ru

Ychwanegu sylw