In de Linux-kern komt de mogelijkheid om eBPF te gebruiken voor het maken van taakplanners.

Linus Torvalds heeft zijn bereidheid uitgesproken om patches voor de realisatie van het 'sched_ext'-mechanisme (SCX) op te nemen in de kernel van Linux 6.11, waarvan de release eind september wordt verwacht. Deze patches maken gebruik van eBPF om CPU-schedulers te creƫren die vrijwel alle aspecten van taakuitvoering en CPU-resourcetoewijzing bestrijken. Dergelijke schedulers kunnen dynamisch worden geladen en draaien binnen de Linux-kernel in een eBPF-virtuele machine, waarin, dankzij JIT-compilatie, bytecode wordt omgezet in machine-instructies en wordt uitgevoerd met de prestaties van gecompileerde code.

De voorgestelde patches implementeren een nieuwe klasse van planning SCHED_EXT, waarvoor de prioriteit van aanroep door de kernel tussen de klassen SCHED_IDLE en SCHED_NORMAL is ingesteld. Dit voorkomt dat BPF-handlers die aan SCHED_EXT zijn gekoppeld, invloed hebben op taken die al zijn gekoppeld aan de standaard taakplanner (SCHED_NORMAL), maar biedt de mogelijkheid om afzonderlijke taken aan SCHED_EXT te koppelen of om alle processen met een lagere prioriteit dan realtime-verwerking naar SCHED_EXT te verplaatsen. Als er geen BPF-handlers aan SCHED_EXT zijn gekoppeld, worden alle processen die naar de klasse SCHED_EXT zijn verplaatst, behandeld met de SCHED_NORMAL-scheduler. De werking van BPF-handlers beperkt zich tot het analyseren van de wachtrijen van taken die wachten om op de CPU te worden uitgevoerd (ƩƩn globale wachtrij en ƩƩn wachtrij per CPU-kern) en het selecteren van de taak waarvoor CPU-resources moeten worden toegewezen wanneer een specifieke CPU-kern vrijkomt.

Het sched_ext-mechanisme vereenvoudigt het creƫren van specifieke schedulers voor bepaalde taken, biedt mogelijkheden om te experimenteren met verschillende technieken en strategieƫn voor taakplanning, en maakt het ook mogelijk om snel werkende prototypes te creƫren en schedulers on-the-fly te vervangen binnen operationele infrastructuren. Met sched_ext kan bijvoorbeeld een scheduler worden gemaakt die rekening houdt met de specificaties van een bepaalde toepassing en de planningsstrategie voor de uitvoering ervan dynamisch verandert op basis van de systeemstatus en andere aanvullende factoren.

Momenteel zijn er al ongeveer een dozijn schedulers in ontwikkeling op basis van sched_ext, waarvan de logica voor taakplanning in de gebruikersruimte wordt gedefinieerd en in de kernel wordt geladen in de vorm van BPF-programma's:

  • scx_layered — een hybride taakplanner die taken in lagen verdeelt, waarvoor elk zijn eigen planningsstrategie toepast. Bijvoorbeeld, scx_layered maakt het mogelijk om bepaalde taken in een aparte laag te выГелen, waarvoor specifieke gegarandeerde CPU-resources worden aangeboden, of om de prioriteit van bepaalde applicaties te verhogen. De planner wordt ontwikkeld door Meta. De logica voor het genereren van BPF in de gebruikersruimte is geschreven in Rust.
  • scx_rustland — een planner die is geoptimaliseerd om de prioriteit van interactieve taken te verhogen tegenover taken die intensief op de CPU werken. Bijvoorbeeld, in de test van het starten van de game Terraria gelijktijdig met het bouwen van de kernel, stelde de scx_rustland-planner ons in staat om een hogere FPS in het spel te bereiken dan bij het gebruik van de standaard EEVDF-planner. Het project wordt ontwikkeld door een medewerker van Canonical. De logica voor het genereren van BPF in de gebruikersruimte is geschreven in Rust.
  • scx_lavd — implementaties van het scheduling-algoritme LAVD (Latency-criticality Aware Virtual Deadline), dat rekening houdt met de noodzaak om latentie te verminderen voor specifieke taken en informatie over de voortgang van processen gebruikt bij het nemen van beslissingen over de toewijzing van CPU-resources. De planner wordt ontwikkeld door Igalia en Valve om latentie te verminderen in computerspellen en interactieve taken. De logica voor het genereren van BPF in de gebruikersruimte is geschreven in Rust.
  • scx_rusty, scx_rlfifo, scx_mitosis — voorbeelden van planners met componenten in de gebruikersruimte in Rust, die balanceren tussen taakgroepen op basis van belasting, een eenvoudige FIFO-planner en een planner voor het toewijzen van taakgroepen aan CPU-kernen.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — voorbeelden van planners met componenten in de gebruikersruimte in C, die verschillende mogelijkheden van sched-ext illustreren.

Het mechanisme sched_ext werd oorspronkelijk in 2022 door de kernelontwikkelaars voorgesteld voor overweging, waarna zes versies van de patch werden gepubliceerd. Ondanks de afwezigheid van ondersteuning in de belangrijkste kern, is het mogelijk om sched_ext te installeren via aanvullende pakketten voor de distributies Ubuntu, Arch Linux, Fedora en NixOS. Canonical overweegt de integratie van sched-ext-componenten in Ubuntu 24.10 en Valve werkt aan de integratie van sched_ext in Steam Deck. Bij Meta wordt de scheduler op basis van sched_ext al toegepast in de werk infrastructuur.

Google experimenteert met het gebruik van zijn eigen framework ghOSt, waarmee beslissingen van de taakplanner kunnen worden beĆÆnvloed met behulp van BPF-programma's. Momenteel is men bezig met de portering van ghOSt naar sched_ext. Google ontwikkelt ook de port van sched_ext voor ChromeOS met de intentie deze te gebruiken voor de implementatie van de hybride planner scx_layered om vertragingen te verminderen zonder extensies voor realtime verwerking. Oculus ontwikkelt de port van sched_ext voor Android.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster