Fast Kernel Headers, набор от пачове, които ускоряват компилацията на ядрото с 50-80%

Инго Молнар, известен разработчик на ядрото на Linux и автор на CFS Task Scheduler предложи за обсъждането на пощенския списък за разработка на ядрото на Linux редица кръпки, засягащи повече от половината от всички файлове в източника на ядрото и осигуряващи общо увеличение на скоростта на възстановяване на ядрото с 50 -80% в зависимост от конфигурацията.

Внедрената оптимизация е забележителен, защото е свързан с добавянето на най-големия набор от промени в историята на разработката на ядрото: те се заеха да включат 2297 пачове наведнъж, променяйки повече от 25 хиляди файла.

Печалбата на производителността се постига чрез промяна на метода за обработка на заглавния файл. Трябва да се отбележи, че в продължение на тридесет години на развитие на ядрото, състоянието на заглавните файлове е придобило потискаща форма поради наличието на голям брой кръстосани зависимости между файловете.

Преструктурирането на заглавните файлове отне повече от година и изискваше значително препроектиране на йерархията и зависимостите. По време на преструктурирането беше извършена работа за разделяне на дефинициите на типове и API за различните подсистеми на ядрото.

Имам удоволствието да обявя първата публична версия на моя нов проект „Бързи заглавки на ядрото“, по който работя от края на 2020 г., който представлява цялостна преработка на йерархията на заглавките на ядрото на Linux и зависимостите на заглавките с двойна цел:

– ускоряване на изграждането на ядрото (както абсолютно, така и инкрементално време за изграждане)

– отделяне на тип подсистема и дефиниции на API един от друг

Както повечето разработчици на ядрото знаят, има около ~ 10,000 30 основни .h заглавки в ядрото на Linux, в йерархиите include / и arch / * / include /. През последните XNUMX+ години те се превърнаха в сложен и болезнен набор от кръстосани зависимости, които нежно наричаме „Ад на зависимостта“.

Сред направените промени са: разделяне на заглавни файлове от високо ниво един от друг, изключване на вградени функции, които свързват заглавни файлове, картографиране на заглавни файлове за типове и 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 XNUMX.

Когато ядрото беше напълно възстановено с командата "make -j96 vmlinux" на тестовата система, прилагането на пачовете показа намаляване на времето за изграждане на клона v5.16-rc7 от 231,34 на 129,97, 15,5 секунди (от 27,7 на XNUMX компилации на час) и също така увеличи ефективността на използването на ядрото на процесора по време на изграждането.

При инкрементално изграждане ефектът от оптимизация е още по-забележим: времето за повторно изграждане на ядрото след извършване на промени в заглавните файлове е значително намалено (от 112% до 173%, в зависимост от заглавния файл, който се променя).

Понастоящем оптимизациите са налични само за архитектури ARM64, MIPS, Sparc и x86 (32-битови и 64-битови).

Фино ако се интересувате да научите повече за това, можете да проверите подробностите в следваща връзка.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.