Објавен е сет на закрпи кои го забрзуваат градењето на кернелот на Linux за 50-80%

Инго Молнар, добро познат развивач на кернелот на Линукс и автор на распоредувачот на задачи 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“ на тест систем, примената на закрпи покажа намалување на времето на градење на гранката v5.16-rc7 од 231.34 на 129.97 секунди (од 15.5 на 27.7 градби на час), а исто така ја зголеми ефикасноста на користење јадра на процесорот за време на склоповите. Со постепеното градење, ефектот на оптимизација е уште позабележителен - времето за повторно градење на кернелот откако ќе се направат промени во датотеките за заглавието е значително намалено (од 112% на 173% во зависност од датотеката за заглавие што се менува). Во моментов, оптимизациите се достапни само за архитектурите ARM64, MIPS, Sparc и x86 (32 и 64-битни).

Извор: opennet.ru

Додадете коментар