В ядрото на Linux ще се появи възможността за използване на eBPF за създаване на планировчици на задачи.

Линус Торвальдс изрази готовност да приеме в ядрото на Linux 6.11, чийто релиз се очаква в края на септември, пачове с реализация на механизма «sched_ext» (SCX), позволяващ използването на eBPF за създаване на планировчици на CPU, обхващащи практически всички аспекти на планирането на изпълнение на задачи и разпределението на ресурси на CPU. Подобни планировчици могат да се зареждат динамично и да изпълняват в ядрото на Linux в виртуална машина eBPF, в която, благодарение на JIT-компилацията, байткодът се трансформира в машинни инструкции и се изпълнява с производителността на компилиран код.

Предложените пачове реализират нов клас планиране SCHED_EXT, за който е установен приоритет на извикване от ядрото между класовете SCHED_IDLE и SCHED_NORMAL, което не позволява на BPF-обработчиците, свързани с SCHED_EXT, да влияят на задачите, вече закрепени към стандартния планировчик на задачи (SCHED_NORMAL), но дава възможност за свързване на отделни задачи към SCHED_EXT или преместване за обработка с неговата помощ на всички процеси, с приоритет по-нисък от изпълнението в реално време. Ако не са свързани BPF-обработчици към SCHED_EXT, всички процеси, преместени в класа SCHED_EXT, ще се обработват с помощта на планировчика SCHED_NORMAL. Работата на BPF-обработчиците се състои в анализа на опашките на задачите, чакащи изпълнение на CPU (една глобална опашка и по една опашка на ядро CPU), и избора на задача, на която следва да се предоставят ресурси на CPU при освобождаването на съответното ядро CPU.

Механизмът sched_ext улеснява създаването на специфични за определени задачи планировчици, дава възможност за експериментиране с различни техники и стратегии за планиране, а също така позволява бързо създаване на работни прототипи и замяна на планировчици в движение в работни инфраструктури. Например, с помощта на sched_ext може да се създаде планировчик, който взема под внимание спецификата на конкретно приложение и динамично променя стратегията за планиране на неговото изпълнение в зависимост от състоянието на системата и допълнителни фактори.

В момента се разработват около десет планировчици на базата на sched_ext, чиято логика за планиране на задачи е определена в пространството на потребителя и се зарежда в ядрото под формата на BPF-програми:

  • scx_layered — хибриден планировчик на задачи, който разделя задачите на слоеве, за всеки от които се прилага своя стратегия за планиране. Например, scx_layered позволява да се отделят в самостоятелен слой определени задачи, за които ще бъдат предоставени конкретни гарантирани ресурси CPU, или да се повиши приоритета на отделни приложения. Планиращият се развива от компанията Meta. Работещата в потребителското пространство логика за генериране на BPF е написана на езика Rust.
  • scx_rustland — планиращ, оптимизиран за повишаване на приоритета на интерактивни задачи на фона на задачи, интензивно натоварващи CPU. Например, в теста на стартирането на играта Terraria едновременно със сборката на ядрото, планиращият scx_rustland позволи да се постигне по-висок FPS в играта в сравнение с използването на стандартния планиращ EEVDF. Проектът се развива от служител на компанията Canonical. Работещата в потребителското пространство логика за генериране на BPF е написана на езика Rust.
  • scx_lavd — реализация на алгоритъма за планиране на задачи LAVD (Latency-criticality Aware Virtual Deadline), който взема предвид актуалността на намаляване на закъсненията за конкретни задачи и използва информация за напредъка на изпълнение на процесите при вземането на решения за разпределение на ресурси CPU. Планиращият се развива от компаниите Igalia и Valve с цел намаляване на закъсненията в компютърните игри и интерактивни задачи. Работещата в потребителското пространство логика за генериране на BPF е написана на езика Rust.
  • scx_rusty, scx_rlfifo, scx_mitosis — примери за планиращи с компоненти в потребителското пространство на езика Rust, реализиращи балансиране между групи задачи в зависимост от натоварването, най-простия FIFO планиращ и планиращ за привързване на групи задачи към ядра CPU.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — примери за планиращи с компоненти в потребителското пространство на езика C, илюстриращи различни възможности на sched-ext.

Първоначално механизмът sched_ext беше предложен за обсъждане на разработчиците на ядрото през 2022 година, след което бяха публикувани шест редакции на патча. Въпреки липсата на поддръжка в основния състав на ядрото, за дистрибуциите Ubuntu, Arch Linux, Fedora и NixOS е предоставена възможност за инсталиране на sched_ext чрез допълнителни пакети. Компанията Canonical разглежда възможността за включване на компонентите sched-ext в състава на Ubuntu 24.10, а компанията Valve работи по интегрирането на sched_ext в Steam Deck. В компанията Meta планирачът на базата на sched_ext вече се използва в работната инфраструктура.

Компанията Google експериментира с използването на собствения си фреймуърк ghOSt, който позволява влияние върху решенията на планировчика на задачи чрез BPF-програми. В момента е започнала работа по портироването на ghOSt на sched_ext. Google също развива порт на sched_ext за ChromeOS с намерението да го използва за задействане на хибридния планировчик scx_layered за намаляване на закъсненията без използване на разширения за работа в реално време. Компанията Oculus развива порт на sched_ext за Android.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster