Один з розробників ядра Linux намагається позбутися «пекла залежностей»

3 хв. читання

Минулого року код ядра Linux складався з 27.8 мільйонів рядків, і відтоді їхня кількість лише зросла. Але Ingo Molnar, один з сіньор-розробників ядра Linux, витратив багато місяців на спробу дещо очистити й упорядкувати код. Свій проєкт він назвав «Fast Kernel Headers».

Об'єктом його роботи стало комплексне очищення й перероблення ієрархії та залежностей заголовків ядра. Загалом ядро Linux мстить понад 10 000 основних заголовків з ієрархіями include/ та arch/*/include/. Molnar пояснює, що «за останні 30+ років вони перетворилися на складний і болючий набір перехресних залежностей, які ми люб'язно називаємо «пеклом залежностей».

Усього розробник запропонував 2200 змін. Спочатку він не очікував такого безладу в коді. Перед початком роботи, наприкінці 2020 року, він виконав кілька приблизних вимірювань, які показали близько 20% підвищення швидкості компіляції після зменшення кількості залежностей заголовків. Він оцінив кількість роботи у 50-100 комітів.

Molnar взявся до впорядкування, але перші спроби виявилися невдалими: 500 патчів прискорили збирання ядра на 4%, а 1000 — на 10%. І коли кількість виправлень та зменшення кількості залежностей сягнула 1 500, швидкість компіляції почала істотно зростати, перевищивши очікування у 20% та сягнувши 78% пришвидшення.

На сьогодні його очищене «дерево швидких заголовків» дає 50-80% поліпшення абсолютної швидкості збирання ядра на підтримуваних архітектурах, залежно від конфігурації. Це великий крок вперед з точки зору ефективності та продуктивності збірки ядра Linux. Такий результат справді вартий витраченого часу.

Проте 2,200 комітів — лише верхівка айсберга. Ці зміни вплинуть майже на кожну програму в ядрі Linux. За оцінками Molnar, «на додаток до 25 піддерев і 2200 комітів, дерево швидких заголовків змінює понад половину всіх наявних файлів ядра. Він збирається змінити 25 288 файлів із 178 024 вставленнями та 74 720 видаленнями.

Крім того, щоб уможливити ці зміни, потрібне агресивне відокремлення заголовків високого рівня, відокремлення типу та заголовка API, автододавання залежностей до файлів .h і .c й оптимізація заголовків. Перш ніж надіслати ці зміни, Molnar збирає відгуки від своїх колег-супровідників ядра. Зокрема, він очікує почути думку «Лінуса Торвальдса та Ендрю Мортона та інших супровідників найбільших підсистем, яких торкнуться ці зміни».

Мейнтейнер стабільної гілки ядра Linux, Greg Kroah-Hartman, вважає проєкт цікавим, проте переймається складністю підтримки синхронізації kernel/sched/per_task_area_struct_defs.h і структури визначень task_struct_per_task. Molnar обіцяє подбати про це, тож Kroah-Hatman все ж погоджує продовження роботи, хоч і вважає її дивною, оскільки це створює певний безлад у коді у спробі обійти проблеми C.

Це, до речі, одна з причин намагання додати Rust другою мовою ядра Linux.

Якщо зміни буде затверджено, користувачі не побачать жодних реальних змін. А от розробники ядра та дистрибутивів Linux зможуть компілювати Linux швидше. У результаті спроститься та пришвидшиться вдосконалення, виправлення та додавання нових можливостей до Linux.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 4.8K
Приєднався: 10 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація