ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‰ΠΈΡ… сборку ядра Linux Π½Π° 50-80%

Инго ΠœΠΎΠ»Π½Π°Ρ€ (Ingo Molnar), извСстный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Linux ядра ΠΈ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π·Π°Π΄Π°Ρ‡ CFS (Completely Fair Scheduler), ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» для обсуТдСния Π² спискС рассылки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ядра Linux ΡΠ΅Ρ€ΠΈΡŽ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² исходных тСкстах ядра ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости ΠΏΠΎΠ»Π½ΠΎΠΉ пСрСсборки ядра Π½Π° 50-80% Π² зависимости ΠΎΡ‚ настроСк. РСализованная оптимизация ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° сопряТСна с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ самого ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ Π² истории Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ядра Π½Π°Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ — для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ 2297 ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ 25 тысяч Ρ„Π°ΠΉΠ»ΠΎΠ² (10 тысяч Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… «include/» ΠΈ «arch/*/include/» ΠΈ 15 тысяч Ρ„Π°ΠΉΠ»ΠΎΠ² с исходными тСкстами).

ΠŸΡ€ΠΈΡ€ΠΎΡΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ достигаСтся Π·Π° счёт измСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π·Π° Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ Π»Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ядра состояниС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² приняло ΡƒΠ΄Ρ€ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΈΠ·-Π·Π° наличия большого числа пСрСкрёстных зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ рСструктуризациСй Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² заняла Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° провСдСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈ зависимостСй. Π’ Ρ…ΠΎΠ΄Π΅ рСструктуризации Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ API для Ρ€Π°Π·Π½Ρ‹Ρ… подсистСм ядра.

Π‘Ρ€Π΅Π΄ΠΈ внСсённых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ высокоуровнСвых Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ inline-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² для Ρ‚ΠΈΠΏΠΎΠ² ΠΈ API, обСспСчСниС обособлСнной сборки Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΎΠΊΠΎΠ»ΠΎ 80 Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅Π»ΠΈ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ сборкС нСпрямыС зависимости, выставляСмыС Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹), автоматичСскоС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостСй ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ «.h» ΠΈ «.c», пошаговая оптимизация Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², использованиС Ρ€Π΅ΠΆΠΈΠΌΠ° «CONFIG_KALLSYMS_FAST=y», выборочная консолидация Π‘ΠΈ-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² сборочныС Π±Π»ΠΎΠΊΠΈ для сниТСния числа ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ ΠΈΡ‚ΠΎΠ³Π΅, продСланная Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π½Π° 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ