Linus Torvalds har uttryckt beredskap att ta med patchar med implementeringen av mekanismen "sched_ext" (SCX) i Linux 6.11-kÀrnan, vars release förvÀntas i slutet av september. Denna mekanism möjliggör anvÀndning av eBPF för att skapa CPU-schemalÀggare som tÀcker nÀstan alla aspekter av uppgiftsutförande och resursfördelning av CPU. SÄdana schemalÀggare kan laddas dynamiskt och köras inom Linux-kÀrnan i en eBPF-virtuell maskin, dÀr bytekoden översÀtts till maskininstruktioner med hjÀlp av JIT-kompilering och körs med prestanda likt kompilerad kod.
De föreslagna patcharna implementerar en ny klass av schemalÀggning SCHED_EXT, dÀr prioriteten för kÀrnans anrop mellan klasserna SCHED_IDLE och SCHED_NORMAL har stÀllts in. Detta hindrar BPF-hanterare kopplade till SCHED_EXT frÄn att pÄverka uppgifter som redan Àr kopplade till den vanliga schemalÀggaren (SCHED_NORMAL), men ger möjlighet att koppla enskilda uppgifter till SCHED_EXT eller flytta alla processer med lÀgre prioritet Àn realtidsutförande för att behandlas med hjÀlp av SCHED_EXT. Om inga BPF-hanterare Àr kopplade till SCHED_EXT kommer alla processer som flyttas till klassen SCHED_EXT att behandlas med SCHED_NORMAL-schemalÀggaren. BPF-hanterarnas arbete bestÄr av att analysera köerna av uppgifter som vÀntar pÄ att bli utförda pÄ CPU (en global kö och en kö per CPU-kÀrna) och vÀlja vilken uppgift som ska fÄ CPU-resurser nÀr en CPU-kÀrna blir ledig.
Mekanismen sched_ext förenklar skapandet av specifika schemalÀggare för vissa uppgifter, ger möjlighet att experimentera med olika tekniker och strategier för schemalÀggning, samt möjliggör snabb skapande av arbetsprototyper och att byta schemalÀggare i realtid i arbetsinfrastrukturer. Till exempel kan en schemalÀggare skapas med hjÀlp av sched_ext som tar hÀnsyn till specifikationen av en viss applikation och dynamiskt Àndrar schemalÀggningsstrategin för dess utförande beroende pÄ systemets tillstÄnd och andra faktorer.
För nÀrvarande utvecklas det redan cirka ett dussin schemalÀggare baserade pÄ sched_ext, dÀr logiken för uppgiftsschemalÀggning definieras i anvÀndarutrymmet och laddas in i kÀrnan i form av BPF-program:
- scx_layered â en hybriduppgiftsschemalĂ€ggare som delar upp uppgifter i lager, var och en med sin egen schemalĂ€ggningsstrategi. Till exempel lĂ„ter scx_layered vissa uppgifter sĂ€rskiljas i ett separat lager, för vilka vissa garanterade CPU-resurser kommer att tillhandahĂ„llas, eller höjer prioriteten för vissa applikationer. SchemalĂ€ggaren utvecklas av företaget Meta. Logiken för BPF-generering i anvĂ€ndarutrymmet Ă€r skriven i sprĂ„k som Rust.
- scx_rustland â en schemalĂ€ggare optimerad för att höja prioriteten för interaktiva uppgifter i en miljö med uppgifter som intensivt belastar CPU. Till exempel i testet av att starta spelapplikationen Terraria samtidigt som kĂ€rnan byggs, gjorde schemalĂ€ggaren scx_rustland att man kunde uppnĂ„ högre FPS i spelet Ă€n med den standardmĂ€ssiga schemalĂ€ggaren EEVDF. Projektet utvecklas av en anstĂ€lld pĂ„ Canonical. Logiken för BPF-generering i anvĂ€ndarutrymmet Ă€r skriven i sprĂ„k som Rust.
- scx_lavd â implementeringen av LAVD-algoritmen för uppgiftsschemalĂ€ggning (Latency-criticality Aware Virtual Deadline), som tar hĂ€nsyn till vikten av att minska fördröjningar för specifika uppgifter och anvĂ€nder information om processernas framsteg vid resursfördelning för CPU. SchemalĂ€ggaren utvecklas av Igalia och Valve för att minska fördröjningar i datorspel och interaktiva uppgifter. Logiken för BPF-generering i anvĂ€ndarutrymmet Ă€r skriven i sprĂ„k som Rust.
- scx_rusty, scx_rlfifo, scx_mitosis â exempel pĂ„ schemalĂ€ggare med komponenter i anvĂ€ndarutrymmet skrivna i Rust, som implementerar balans mellan grupper av uppgifter beroende pĂ„ belastningen, en enkel FIFO-schemalĂ€ggare och en schemalĂ€ggare för att binda grupper av uppgifter till kĂ€rnor av CPU.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland â exempel pĂ„ schemalĂ€ggare med komponenter i anvĂ€ndarutrymmet skrivna i C, som illustrerar de olika funktionerna hos sched-ext.
Ursprungligen föreslogs mekanismen sched_ext för granskning av kÀrnutvecklarna Är 2022, efter vilket sex versioner av patchen publicerades. Trots avsaknaden av stöd i kÀrnans huvudkomponenter, finns det möjlighet att installera sched_ext via extra paket för distributioner som Ubuntu, Arch Linux, Fedora och NixOS. Canonical övervÀger att inkludera komponenter av sched-ext i Ubuntu 24.10, och Valve arbetar med att integrera sched_ext i Steam Deck. PÄ Meta tillÀmpas redan en scheduler baserad pÄ sched_ext i den interna infrastrukturen.
Google experimenterar med sin egen ramverk ghOSt, som gör det möjligt att pÄverka beslut av schemalÀggaren med hjÀlp av BPF-program. För nÀrvarande har arbetet med att portera ghOSt till sched_ext inletts. Google utvecklar ocksÄ en port av sched_ext för ChromeOS med avsikt att anvÀnda den för att aktivera den hybrida schemalÀggaren scx_layered för att minska latensen utan att anvÀnda tillÀgg för realtidsarbete. Oculus utvecklar en port av sched_ext för Android.
KĂ€lla: opennet.ru
