Опубліковано набір патчів, що прискорюють збирання ядра Linux на 50-80%.

Інго Молнар (Ingo Molnar), відомий розробник Linux ядра і автор планувальника завдань CFS (Completely Fair Scheduler), запропонував для обговорення в списку розсилки розробників ядра Linux серію патчів, що зачіпають більше половини всіх файлів у вихідних текстах ядра і забезпечують збільшення швидкості на 50-80% залежно від налаштувань. Реалізована оптимізація примітна тим, що вона пов'язана з додаванням найбільшого в історії розробки ядра набору змін - для включення разом запропоновано 2297 патчів, що змінюють більше 25 тисяч файлів (10 тисяч файлів заголовків в каталогах «include/» і «arch/*/include/ » та 15 тисяч файлів з вихідними текстами).

Приріст продуктивності досягається рахунок зміни методу обробки заголовних файлів. Зазначається, що за тридцять років розробки ядра стан заголовних файлів набув гнітючого вигляду через наявність великої кількості перехресних залежностей між файлами. Робота над реструктуризацією заголовних файлів зайняла понад рік і зажадала проведення значної переробки ієрархії та залежностей. У ході реструктуризації було виконано роботу з поділу визначень типів і API щодо різних підсистем ядра.

Серед внесених змін: відділення високорівневих заголовних файлів один від одного, виключення зв'язувальних заголовних файлів inline-функцій, виділення заголовних файлів для типів і API, забезпечення відокремленого складання заголовних файлів (близько 80 файлів мали непрямі залежності, що заважають збиранню), що виставляють через інші заголовні файли автоматичне додавання залежностей до файлів.

У результаті, виконана робота дозволила на 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 збирання на годину), а також підвищило ефективність використання ядер CPU під час збирання. При інкрементальному складанні ефект від оптимізації ще більш помітний - час повторного перескладання ядра після внесення змін до заголовкових файлів скоротився в рази (від 112% до 173% залежно від заголовного файлу, що змінюється). Оптимізації поки що доступні тільки для архітектур ARM64, MIPS, Sparc і x86 (32- і 64-біт).

Джерело: opennet.ru

Додати коментар або відгук