Estamos няколко дни след излизането на стабилната версия на Linux 6.10, версия, която ще включва серия от доста интересни промени, както и страхотни подобрения по отношение на поддръжката на устройството, функциите и др.
След време ще говорим за това издание, тъй като причината за тази статия е позоваване на следващата очаквана версия на Linux, която е "Linux 6.11", издание на което бяха обявени някои промени, които споменавам достатъчно време, бих искал да се обърна към тях в друга публикация.
Добре, сега преминаваме към точката на статията, която е вътре препратка към съобщение, направено от Линус Торвалдс относно желанието им да включат в ядрото на Linux 6.11, някои пачове, които прилагат механизма “sched_ext” (SCX).
Този механизъмили е предназначен да използва eBPF за създаване на планировчици на процесора в ядрото на Linux. Ето обобщение на това как ще работи:
- eBPF и CPU програмисти: С използването на eBPF планировчиците на процесора могат да бъдат динамично заредени и изпълнени в ядрото на Linux. Компилацията Just-In-Time (JIT) преобразува eBPF байт кода в машинни инструкции за изпълнение.
- SCHED_EXT клас: Това е нов програмен клас, чийто приоритет на извикване на ядрото е сред класовете SCHED_IDLE и SCHED_NORMAL. BPF драйвери, свързани с SCHED_EXT може да обработва задачи, които имат по-нисък приоритет от изпълнението в реално време, без да засяга задачите, които вече са прикачени към нормалния планировчик SCHED_NORMAL.
- операция: BPF драйверите анализират опашки от задачи, чакащи да бъдат изпълнени на процесора, и избират коя задача да присвоят, когато ядрото на процесора бъде освободено. Ако няма активни BPF драйвери на SCHED_EXT, задачите се обработват с помощта на планировчика SCHED_NORMAL.
- предимства: Механизмът sched_ext улеснява експериментирането с различни техники и стратегии за програмиране по динамичен начин. Това ви позволява бързо да създавате функционални прототипи на програмисти и да ги заменяте в движение в производствени среди. Например, той може да бъде настроен да отговаря на специфичните характеристики на дадено приложение и да промени стратегията за планиране въз основа на състоянието на системата и други фактори.
Струва си да се спомене това „sched_ext“ първоначално беше предложен за разглеждане от разработчиците на ядрото през 2022 г, последвано от пускането на шест ревизии на корекции. Въпреки че не се поддържа в основното ядро, Няколко дистрибуции като Ubuntu, Arch Linux, Fedora и NixOS предлагат инсталирането на "sched_ext" чрез допълнителни пакети. Canonical обмисля включването на компоненти на «sched_ext» в Ubuntu 24.10 и Valve работи върху интегрирането му за Steam Deck. В Meta програмистът, базиран на «sched_ext» вече се използва в производствената инфраструктура.
Освен това се споменава, че в момента около дузина програмисти са базирани на "sched_ext", всяка с логика за планиране на задачи, дефинирана в потребителското пространство и заредена в ядрото с помощта на BPF програми.
- scx_слоест: Хибриден планировчик, който разделя задачите на слоеве, всеки със собствена стратегия за планиране. Позволява ви да възложите определени задачи на конкретни слоеве с гарантирани ресурси на процесора или да увеличите приоритета на отделни приложения. Разработена от Meta, нейната логика на потребителското пространство е написана на Rust.
- scx_rustland: Оптимизиран за приоритизиране на интерактивни задачи пред интензивни CPU. Например, той подобрява FPS в играта Terraria по време на едновременна компилация на ядрото в сравнение със стандартния планировчик EEVDF. Разработено от служител на Canonical, с логика в Rust.
- scx_lavd: Внедрява алгоритъма LAVD (Latency-criticality Aware Virtual Deadline), намалявайки латентността в компютърни игри и интерактивни задачи, като отчита уместността на намаляването на забавянията и напредъка на процеса. Разработено от Igalia и Valve, с логика в Rust.
- scx_rusty, scx_rlfifo, scx_mitosis: Планировчици, които балансират групи задачи въз основа на натоварването, внедряват прост FIFO планировчик и свързват групи задачи към ядрата на процесора. Всички с Rust компоненти.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Примери за програмисти с C компоненти, демонстриращи различните възможности на “sched_ext”.
И накрая, струва си да добавим, че Google експериментира с използването на своя собствена рамка, ghOSt, за да повлияе на решенията на планировчика на задачи, използвайки BPF програми, и започна да мигрира ghOSt към sched_ext. Освен това Google разработва порт на „sched_ext“ за ChromeOS.
Fuente: https://lkml.org