Linus Torvalds kifejezte készségét, hogy fogadja a Linux 6.11 magjába azokat a javítócsomagokat, amelyek bevezetik a «sched_ext» (SCX) mechanizmust, lehetővé téve az eBPF használatát CPU ütemezők létrehozásához, amelyek szinte minden aspektusát lefedik a feladatok végrehajtásának ütemezésének és a CPU erőforrások elosztásának. Az ilyen ütemezők dinamikusan betölthetők és végrehajthatók a Linux kernelében egy eBPF virtuális gépen, ahol a JIT-kompiláció alkalmazásának köszönhetően a bájtkód gépi utasításokká fordul és összeállított kód teljesítményével fut.
A javasolt javítócsomagok egy új ütemezési osztályt, a SCHED_EXT-et vezetik be, amelynek prioritását a kernel az SCHED_IDLE és SCHED_NORMAL osztályok között állítja be, ez nem teszi lehetővé, hogy a SCHED_EXT-hez kötött BPF-kezelők befolyásolják azokat a feladatokat, amelyek már a normál ütemezőhöz (SCHED_NORMAL) tartoznak, de lehetőséget ad egyes feladatok SCHED_EXT-hez történő csatolására vagy az összes, valós idejű üzemeltetés alatt álló folyamat SCHED_EXT-hez való áthelyezésére. Ha a SCHED_EXT-hez nincsenek kötve BPF-kezelők, akkor minden, a SCHED_EXT osztályba áthelyezett folyamat a SCHED_NORMAL ütemező segítségével lesz kezelve. A BPF-kezelők működése a CPU-n végrehajtásra váró feladatok sorainak elemzésére (egy globális sor és egy sor a CPU magonként) és annak a feladatnak a kiválasztására vonatkozik, amelynek CPU erőforrásokat kell biztosítani, amikor a megfelelő CPU mag felszabadul.
A sched_ext mechanizmus egyszerűsíti a meghatározott feladatokra jellemző ütemezők létrehozását, lehetőséget ad a különböző technikák és ütemezési stratégiák kísérletezésére, valamint lehetővé teszi a gyors munkamodellek létrehozását és az ütemezők azonnali cseréjét a működő infrastruktúrákban. Például a sched_ext segítségével létrehozható egy olyan ütemező, amely figyelembe veszi egy bizonyos alkalmazás sajátosságait és dinamikusan módosítja annak végrehajtásának ütemezési stratégiáját a rendszer állapota és egyéb tényezők függvényében.
Jelenleg körülbelül tucatnyi ütemező fejlődik a sched_ext alapjain, amelyek feladatütemezési logikája a felhasználói térben van meghatározva és BPF-programok formájában kerül betöltésre a kernelbe:
- scx_layered — hibrid feladatütemező, amely a feladatokat rétegekre osztja, amelyekhez egyedi ütemezési stratégia alkalmazható. Például, az scx_layered lehetővé teszi egyes feladatok elkülönítését egy rétegbe, amelyekhez garantált CPU erőforrásokat rendelnek, vagy egyes alkalmazások prioritásának növelését. Az ütemezőt a Meta fejleszti. A felhasználói térben működő BPF-generáló logika Rust nyelven íródott.
- scx_rustland — ütemező, amely optimalizálva van az interaktív feladatok prioritásának növelésére a CPU-t intenzíven terhelő feladatokkal szemben. Például, a Terraria játékkénti indítása közben a kernel összegyúrásával az scx_rustland ütemező lehetővé tette a játékban a magasabb FPS elérését, mint a szabványos EEVDF ütemező használatával. A projektet a Canonical munkatársa fejleszti. A felhasználói térben működő BPF-generáló logika Rust nyelven íródott.
- scx_lavd — a LAVD (Latency-criticality Aware Virtual Deadline) feladatütemezési algoritmus megvalósítása, amely figyelembe veszi a késleltetések csökkentésének fontosságát a konkrét feladatokhoz és a folyamatok végrehajtásának előrehaladásáról szóló információkat használja a CPU erőforrások elosztásáról döntő mechanizmusban. Az ütemezőt az Igalia és a Valve fejleszti, a késleltetések csökkentésére számítógépes játékokban és interaktív feladatokban. A felhasználói térben működő BPF-generáló logika Rust nyelven íródott.
- scx_rusty, scx_rlfifo, scx_mitosis — példák munkaerőtervezőkön, amelyek felhasználói térben Rust nyelven valósítanak meg feladatcsoportok közötti terheléselosztást, egyszerű FIFO-ütemezőt és ütemezőt a feladatcsoportok CPU-kernelekhez való kötésére.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — példák ütemezőkre, amelyek felhasználói térben C nyelven valósítanak meg különféle sched-ext lehetőségeket.
A sched_ext mechanizmust 2022-ben került kezdeményezésre a Linux kernel fejlesztői által, ezt követően hat patch verziót tettek közzé. Bár a kernel alapverziójában nincs támogatás, az Ubuntu, Arch Linux, Fedora és NixOS disztribúciók számára elérhető a sched_ext telepítése kiegészítő csomagokon keresztül. A Canonical fontolóra veszi a sched-ext komponensek beépítését az Ubuntu 24.10-be, míg a Valve a sched_ext Steam Deck-be való integrálásán dolgozik. A Meta már alkalmazza a sched_ext alapú ütemezőt a munkainfrastruktúrájában.
A Google saját ghOSt keretrendszerének használatával kísérletezik, amely lehetővé teszi az ütemező döntéseinek befolyásolását BPF programok segítségével. Jelenleg a ghOSt sched_ext-re való portolásán dolgoznak. A Google emellett a sched_ext ChromeOS verzióját is fejleszti, azt tervezve, hogy ezt a hibrid ütemező scx_layered aktiválásához használja, csökkentve ezzel a késleltetéseket anélkül, hogy kiterjesztéseket kellene használniuk a valós idejű működéshez. Az Oculus a sched_ext Androidra való portolásán dolgozik.
Forrás: opennet.ru
