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

Източник: opennet.ru

Добавяне на нов коментар