V jádře Linuxu se objeví možnost využití eBPF pro vytváření plánovačů úloh

Linus Torvalds vyjádřil ochotu přijmout do jádra Linux 6.11, jehož vydání se očekává na konci září, patche implementující mechanismus „sched_ext“ (SCX), který umožňuje používat eBPF k vytváření plánovačů CPU pokrývajících prakticky všechny aspekty plánování vykonávání úloh a rozdělování zdrojů CPU. Takové plánovače lze dynamicky načítat a vykonávat uvnitř jádra Linux v virtuálním stroji eBPF, kde díky použití JIT kompilace je bajtkód překládán na strojové instrukce a vykonáván s výkonem zkompilovaného kódu.

Navrhované patche implementují novou třídu plánování SCHED_EXT, pro kterou je stanovena priorita volání jádrem mezi třídami SCHED_IDLE a SCHED_NORMAL, což brání v BPF obsluhách, připojených k SCHED_EXT, ovlivnit úlohy již připojené k standardnímu plánovači úloh (SCHED_NORMAL), ale umožňuje připojení jednotlivých úloh k SCHED_EXT nebo přesun všech procesů s nižší prioritou, které nejsou v reálném čase, k jeho zpracování. Pokud k SCHED_EXT nejsou připojeny BPF obsluhy, všechny procesy přesunuté do třídy SCHED_EXT budou zpracovávány pomocí plánovače SCHED_NORMAL. Práce BPF obsluh se skládá z analýzy front úloh čekajících na vykonání na CPU (jedna globální fronta a jedna fronta na každé jádro CPU) a výběru úlohy, které by měly být poskytnuty CPU zdroje při uvolnění fronty jádra CPU.

Mechanismus sched_ext zjednodušuje vytváření specifických plánovačů pro určité úlohy, umožňuje experimentovat s různými technikami a strategiemi plánování a také umožňuje rychle vytvářet pracovní prototypy a vyměňovat plánovače on-the-fly v pracovních infrastrukturách. Například pomocí sched_ext lze vytvořit plánovač, který zohledňuje specifika určité aplikace a dynamicky mění strategii plánování jejího vykonávání v závislosti na stavu systému a dalších faktorech.

V současnosti se již vyvíjí asi desítka plánovačů založených na sched_ext, jejichž logika plánování úloh je definována v prostor uživatele a načítána do jádra ve formě BPF programů:

  • scx_layered — hybridní plánovač úloh, který dělí úkoly na vrstvy, pro každou z nichž se používá vlastní plánovací strategie. Například scx_layered umožňuje vyčlenit do samostatné vrstvy určité úkoly, pro které budou poskytnuty určité garantované zdroje CPU, nebo zvýšit prioritu jednotlivých aplikací. Plánovač vyvíjí společnost Meta. Logika generování BPF běžící ve uživatelském prostoru je napsaná v jazyce Rust.
  • scx_rustland — plánovač optimalizovaný pro zvyšování priority interaktivních úloh na pozadí úloh intenzivně zatěžujících CPU. Například v testu spuštění herní aplikace Terraria současně se sestavováním jádra plánovač scx_rustland umožnil dosáhnout v hře vyššího FPS než při použití standardního plánovače EEVDF. Projekt vyvíjí zaměstnanec společnosti Canonical. Logika generování BPF běžící ve uživatelském prostoru je napsaná v jazyce Rust.
  • scx_lavd — implementace algoritmu plánování úloh LAVD (Latency-criticality Aware Virtual Deadline), který zohledňuje důležitost snižování latence pro konkrétní úkoly a používá informace o průběhu vykonávání procesů při rozhodování o rozdělování zdrojů CPU. Plánovač vyvíjejí společnosti Igalia a Valve k eliminaci latencí ve videohrách a interaktivních úlohách. Logika generování BPF běžící ve uživatelském prostoru je napsaná v jazyce Rust.
  • scx_rusty, scx_rlfifo, scx_mitosis — příklady plánovačů s komponenty v uživatelském prostoru napsanými v jazyce Rust, realizující vyvažování mezi skupinami úloh na základě zatížení, nejjednodušší FIFO plánovač a plánovač pro přiřazení skupin úloh k CPU jádrům.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — příklady plánovačů s komponenty v uživatelském prostoru napsanými v jazyce C, ilustrující různé možnosti sched-ext.

Původně byl mechanismus sched_ext navržen k posouzení vývojáři jádra v roce 2022, po čemž bylo zveřejněno šest verzí opravy. Přestože v základním jádru není podpora, pro distribuce Ubuntu, Arch Linux, Fedora a NixOS je k dispozici možnost instalace sched_ext prostřednictvím dodatečných balíčků. Společnost Canonical zvažuje zahrnutí komponentů sched-ext do Ubuntu 24.10 a společnost Valve pracuje na integraci sched_ext do Steam Deck. Ve společnosti Meta je plánovač založený na sched_ext již používán v pracovní infrastruktuře.

Společnost Google experimentuje s použitím vlastního rámce ghOSt, který umožňuje ovlivňovat rozhodnutí plánovače úloh pomocí BPF programů. V současné době začalo úsilí o portování ghOSt na sched_ext. Google také vyvíjí port sched_ext pro ChromeOS s úmyslem jej využít k nasazení hybridního plánovače scx_layered pro snížení latencí bez použití rozšíření pro provoz v reálném čase. Společnost Oculus vyvíjí port sched_ext pro Android.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster