Linus Torvalds on valmis võtma Linuxi tuuma 6.11 kokku, mille väljalaskmine toimub septembri lõpus, patšid, mis rakendavad 'sched_ext' (SCX) mehhanismi, mis võimaldab kasutada eBPF-i CPU planeerijate loomiseks, mis katab praktiliselt kõik ülesannete täitmise planeerimise ja CPU ressursside jaotamise aspektid. Sellised planeerijad võivad laadida dünaamiliselt ja töötada Linuxi tuumas eBPF virtuaalmasinas, kus JIT-kompileerimise abil, baitkood tõlgitakse masininstruktsioonideks ja töötab kompileeritud koodi tootlikkusega.
Ehkki ettepanekud rakendavad uut SCHED_EXT planeerimise klassi, mille jaoks on prioriteet tuuma poolt määratud SCHED_IDLE ja SCHED_NORMAL vahel, ei võimalda see SCHED_EXT-iga seotud BPF-protsessoritel mõjutada juba SCHED_NORMAL-i sidepidamiseks kinnitatud ülesandeid, kuid võimaldab kinnitada SCHED_EXT-ile eraldi ülesandeid või liigutada kõiki protsesse, mille prioriteet on madalam reaalajas täitmisest, et neid töödelda. Kui SCHED_EXT-iga ei ole seotud BPF-protsessorid, siis kõik SCHED_EXT klassi liigutatud protsessid töödeldakse SCHED_NORMAL-i planeerija kaudu. BPF-protsessorite töö seisneb in otsustades CPU täitmist ootavate ülesannete järjekordi (üks globaalne järjekord ja üks iga CPU tuuma kohta), ning valides ülesande, kellele tuleks CPU ressursid anda, kui vastav CPU tuum vabastatakse.
sched_ext mehhanism lihtsustab töötlemise planeerijate loomist teatud ülesannete jaoks, võimaldab eksperimenteerida erinevate tehnikate ja planeerimisstrateegiate osas, samuti kiiresti luua töötavaid prototüüpe ja vahetada planeerijaid reaalajas töösüsteemides. Näiteks sched_ext-i abil saab luua planeerija, mis arvestab konkreetse rakenduse spetsiifikat ja muudab dünaamiliselt täitmisstrateegiat süsteemi seisundi ja muude täiendavate tegurite põhjal.
Praegu on juba arendamisel umbes tosin sched_ext-põhist planeerijat, mille ülesannete planeerimise loogika määratakse kasutaja ruumis ja laaditakse tuuma BPF-programmidena:
- scx_layered — hübriidne ülesannete ajakava, mis jagab ülesanded kihtideks, mille jaoks kasutatakse oma ajakava strateegiat. Näiteks võimaldab scx_layered eraldada eraldi kihina teatud ülesanded, mille jaoks tagatakse kindlad CPU ressursid, või suurendada teatud rakenduste prioriteeti. Ajakava arendab ettevõte Meta. Kasutajaruumi töötava BPF genereerimise loogika on kirjutatud Rust keeles.
- scx_rustland — ajakava, mis on optimeeritud interaktiivsete ülesannete prioriteedi tõstmiseks taustal, kui töötavad CPU-d intensiivselt koormavad ülesanded. Näiteks mängu rakenduse Terraria käivitamise testi ajal koos kernelikogumisega võimaldas ajakava scx_rustland saavutada mängus kõrgemat FPS-i kui tavapärase ajakava EEVDF kasutamisel. Projekti arendab ettevõtte Canonical töötaja. Kasutajaruumi töötava BPF genereerimise loogika on kirjutatud Rust keeles.
- scx_lavd — LAVD (Latency-criticality Aware Virtual Deadline) ülesannete ajakava rakendus, mis arvestab konkreetsest ülesandest tulenevat viivituse vähendamise olulisust ja kasutab protsesside täitmise käigust saadud teavet CPU ressursside jaotamise otsuste tegemisel. Ajakava arendavad ettevõtted Igalia ja Valve, et vähendada viivitusi arvutimängudes ja interaktiivsetes ülesannetes. Kasutajaruumi töötava BPF genereerimise loogika on kirjutatud Rust keeles.
- scx_rusty, scx_rlfifo, scx_mitosis — näited ajakavade kohta, millel on kasutajaruumis komponendid Rust keeles, mis teostavad tasakaalu ülesandegruppide vahel sõltuvalt koormusest, lihtsaim FIFO-ajakavade ning ajakava, mis sidus ülesandegrupid CPU tuumadega.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — näited ajakavade kohta, millel on kasutajaruumis komponendid C keeles, mis illustreerivad sched-ext erinevaid võimalusi.
Alguses pakkus sched_ext mehhanismi arutamiseks välja tuumaarendajaid 2022. aastal, millele järgnes kuue versiooni paranduste avaldamine. Kuigi tuum ei toeta seda algselt, pakuvad Ubuntu, Arch Linux, Fedora ja NixOS võimalust installida sched_ext täiendavate pakettide kaudu. Canonical kaalub sched_ext komponentide sisestamist Ubuntu 24.10, samas kui Valve töötab sched_ext integreerimise kallal Steam Deck. Meta ettevõttes kasutatakse sched_ext põhist ajastajat juba tööinfrastruktuuris.
Google eksperimenteerib oma ghOSt raamistikuga, mis võimaldab mõjutada ajastaja otsuseid BPF-programmide kaudu. Hetkel töötatakse ghOSti portimise kallal sched_ext-ile. Google arendab samuti sched_ext porti ChromeOS-ile, sooviga kasutada seda hybrid ajastaja scx_layered rakendamiseks latentsuse vähendamiseks ilma reaalajas laiendusi kasutamata. Oculus arendab sched_ext porta Androidile.
Allikas: opennet.ru
