The Linux kernel will introduce the ability to use eBPF for creating task schedulers.

Linus Torvalds har givet sit samtykke til at inkludere patches med implementeringen af mekanismen «sched_ext» (SCX) i kernen af Linux 6.11, hvis udgivelse forventes i slutningen af september. Denne mekanisme gør det muligt at bruge eBPF til at skabe CPU-planlæggere, der dækker næsten alle aspekter af udførelsesplanlægning og ressourcefordeling af CPU. Sådanne planlæggere kan indlæses dynamisk og køre inden i Linux-kernen i en eBPF-virtuel maskine, hvor bytekode via JIT-kompilering oversættes til maskininstruktioner og udføres med ydeevne, der svarer til kompileret kode.

De foreslåede patches implementerer en ny klasse for planlægning, SCHED_EXT, for hvilken prioriteten for kald fra kernen er sat mellem klasserne SCHED_IDLE og SCHED_NORMAL. Dette forhindrer, at BPF-handlere, der er knyttet til SCHED_EXT, kan påvirke opgaver, der allerede er knyttet til den normale opgaveplanlægger (SCHED_NORMAL), men giver mulighed for at knytte specifikke opgaver til SCHED_EXT eller flytte alle processer med lavere prioritet end realtidsudførelse til behandling ved hjælp af det. Hvis der ikke er BPF-handlere bundet til SCHED_EXT, vil alle processer, der flyttes til SCHED_EXT-klassen, blive behandlet af SCHED_NORMAL-planlæggeren. BPF-handlerne arbejder med at analysere opgavekøer, der venter på udførelse på CPU (én global kø og én kø pr. CPU-kerne), og udvælgelsen af den opgave, der skal tildeles CPU-ressourcer, når en CPU-kerne frigives.

Mekanismen sched_ext forenkler oprettelsen af opgavesspecifikke planlæggere, som giver mulighed for at eksperimentere med forskellige teknikker og strategier for planlægning, samt hurtigt skabe arbejdsprototyper og erstatte planlæggere on-the-fly i driftige infrastrukturer. For eksempel kan en planlægger oprettet med sched_ext tage højde for specifikationen af en bestemt applikation og dynamisk ændre sin planlægningsstrategi baseret på systemets tilstand og yderligere faktorer.

I øjeblikket er der omkring ti planlæggere under udvikling baseret på sched_ext, hvor logikken for opgaveplanlægning er defineret i brugerrum og indlæses i kernen som BPF-programmer:

  • scx_layered — en hybrid opgaveplanlægger, der opdeler opgaver i lag, for hver af hvilke der anvendes en specifik planlægningsstrategi. For eksempel tillader scx_layered at выделить visse opgaver i et separat lag, hvor der vil blive tildelt bestemte garanterede CPU-ressourcer, eller at øge prioriteten for enkelte applikationer. Planlæggeren udvikles af virksomheden Meta. Den bruger BPF-genereringslogik, der er skrevet i Rust, i brugerområdet.
  • scx_rustland — en planlægger optimeret til at prioritere interaktive opgaver over opgaver, der intensivt belaster CPU'en. For eksempel i en test, hvor spilapplikationen Terraria blev startet samtidig med kompileringen af kerne, gjorde scx_rustland det muligt at opnå en højere FPS i spillet end ved brug af den standard EEVDF-planlægger. Projektet udvikles af en medarbejder hos Canonical. Den bruger BPF-genereringslogik, der er skrevet i Rust, i brugerområdet.
  • scx_lavd — realiseringen af LAVD (Latency-criticality Aware Virtual Deadline) opgaveplanlægningsalgoritmen, der tager højde for aktualiteten af at reducere forsinkelser for specifikke opgaver og bruger information om procesudførelsens status til at træffe beslutninger om fordelingen af CPU-ressourcer. Planlæggeren udvikles af Igalia og Valve for at reducere forsinkelser i computerspil og interaktive opgaver. Den bruger BPF-genereringslogik, der er skrevet i Rust, i brugerområdet.
  • scx_rusty, scx_rlfifo, scx_mitosis — eksempler på planlæggere med komponenter i brugerområdet skrevet i Rust, der implementerer balance mellem grupper af opgaver afhængigt af belastningen, den simpleste FIFO-planlægger og en planlægger til binding af grupper af opgaver til CPU-kerner.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — eksempler på planlæggere med komponenter i brugerområdet skrevet i C, der illustrerer forskellige muligheder for sched-ext.

Oprindeligt blev sched_ext-mekanismen foreslået til overvejelse af kerneludviklere i 2022, hvorefter der blev offentliggjort seks versioner af patchen. På trods af manglende support i kernens hovedkomponenter, er der mulighed for installation af sched_ext gennem ekstra pakker til distributionerne Ubuntu, Arch Linux, Fedora og NixOS. Canonical overvejer at inkludere sched_ext-komponenter i Ubuntu 24.10, og Valve arbejder på at integrere sched_ext i Steam Deck. Hos Meta anvendes sched_ext-baserede planlæggere allerede i arbejdsinfrastrukturen.

Google eksperimenterer med brugen af deres eget framework ghOSt, som gør det muligt at påvirke opgaveplanlæggerens beslutninger ved hjælp af BPF-programmer. I øjeblikket er der arbejde i gang med at portere ghOSt til sched_ext. Google udvikler også en port af sched_ext til ChromeOS med henblik på at anvende det til at aktivere den hybride planlægger scx_layered for at reducere forsinkelser uden brug af backend-udvidelser til realtidsoperation. Oculus udvikler en port af sched_ext til Android.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster