Linuxi kernelis saab olema võimalus kasutada eBPF-i, et luua ülesandeid ajastavaid planeerijaid

Linus Torvalds on väljendanud valmisolekut lisada Linuxi kernelisse 6.11, mille väljalaskmine on planeeritud septembri lõpus, patšid, mis rakendavad mehhanismi „sched_ext” (SCX), võimaldades kasutada eBPF-i CPU ajastajate loomiseks, mis katab praktiliselt kõik ülesannete täitmise planeerimise ja CPU ressursside jaotamise aspektid. Sellised planeerijad saavad dünaamiliselt laadida ja töötada Linuxi kernelis eBPF-i virtuaalmasinas, kus tänu JIT-kompileerimise rakendamisele tõlgitakse baitkood masiinjuhisteks ning seda täidetakse kompileeritud koodi jõudlusega.

Pakutavad patšid rakendavad uut SCHED_EXT klassi ajastamist, mille puhul on tuuma poolt määratud prioriteet klasside SCHED_IDLE ja SCHED_NORMAL vahel. See ei võimalda SCHED_EXT-le seotud BPF-käsitlejatel mõjutada ülesandeid, mis on juba kinnitatud tavapärasele tööülesande ajastajale (SCHED_NORMAL), kuid annab võimaluse eraldi ülesannete kinnitamiseks SCHED_EXT-ile või nende ümberpaigutamiseks kõikidele protsessidele, mille prioriteet on madalam kui reaalajas täitmine. Kui SCHED_EXT-le ei ole kinnitatud BPF-käsitlejaid, töödeldakse kõik SCHED_EXT klassi liigutatud protsessid tavapärase tööülesande ajastaja (SCHED_NORMAL) abil. BPF-käsitlejate töö piirdub CPU-l täitmist ootavate tööde järjekordade analüüsimisega (üks globaalne järjekord ja üks järjekord iga CPU tuuma jaoks) ning ülesande valimisega, millele tuleks anda CPU ressursid, kui järgmine CPU tuum vabastatakse.

Sched_ext mehhanism lihtsustab ülesandepõhiste graafikute loomist, võimaldades katsetada erinevaid tehnikasid ja strateegiaid ning kiirelt luua töötavaid prototüüpe ja asendada graafikuid reaalajas töökeskkondades. Näiteks sched_ext abil on võimalik luua graafik, mis arvestab konkreetse rakenduse eripäradega ja muudab dünaamiliselt oma strateegiat vastavalt süsteemi olekule ja muudele lisateguritele.

Praegu on juba arendusfaasis umbes tosin sched_ext baasil graafikut, mille ülesannete planeerimise loogika määratletakse kasutajaruumi ja laaditakse südamikku BPF-programmidena:

  • scx_layered — hübriidsüsteemide ülesannete haldur, mis jagab ülesanded kihtideks, mille jaoks rakendatakse konkreetseid planeerimisstrateegiaid. Näiteks võimaldab scx_layered määrata teatud ülesandeid eraldi kihiks, mille jaoks on tagatud kindlad CPU ressursid või tõsta üksikute rakenduste prioriteeti. Tootjatena tegutseb ettevõte Meta. Kasutajaruumi loogika BPF genereerimiseks on kirjutatud Rusti keeles.
  • scx_rustland — planeerija, mis on optimeeritud interaktiivsete ülesannete prioriteedi tõstmiseks, samas kui CPU-d intensiivselt koormavad ülesanded töötavad. Näiteks, Terraria mängu käivitamise testi ajal koos tuumakogumisega lubas planeerija scx_rustland saavutada mängus kõrgemat FPS-i kui tavapärane EEVDF planeerija kasutamine. Projekti arendab ettevõtte Canonical töötaja. Kasutajaruumi loogika BPF genereerimiseks on kirjutatud Rusti keeles.
  • scx_lavd — LAVD (Latency-criticality Aware Virtual Deadline) ülesande planeerimise algoritmi rakendamine, mis arvestab viivituste vähendamise olulisust konkreetsete ülesannete puhul ja kasutab protsesside edusammude teavet CPU ressursside jaotuse otsuste tegemisel. Planeerijat arendavad ettevõtted Igalia ja Valve, et vähendada viivitusi arvutimängudes ja interaktiivsetes ülesannetes. Kasutajaruumi BPF genereerimise loogika on kirjutatud Rust keeles.
  • scx_rusty, scx_rlfifo, scx_mitosis — Rust keeles kasutajaruumi komponente sisaldavad planeerijate näited, mis teostavad tasakaalu koormuse järgi ülesande rühmade vahel, kõige lihtsam FIFO-planeerija ja planeerija, mis seob ülesande rühmad CPU tuumadega.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — Sii keeles kasutajaruumi komponente sisaldavad planeerijate näited, mis illustreerivad sched-ext erinevaid võimalusi.

Alguses pakuti sched_ext mehhanismi tuuma arendajate tähelepanu alla 2022. aastal, millele järgnes kuue patši väljaandmine. Hoolimata toetasudest põhituumas, on Ubuntu, Arch Linux, Fedora ja NixOS distributsioonide jaoks saadaval võimalus installida sched_ext läbi lisapakettide. Canonical kaalub sched-ext komponentide lisamist Ubuntu 24.10 koosseisu ning Valve töötab sched_ext integreerimise kallal Steam Deck'is. Meta ettevõttes on sched_ext põhinev planeerija juba kasutusel töösüsteemis.

Google katsetab enda ghOSt raamistikku, mis võimaldab mõjutada ülesandeplaneerija otsuseid BPF-programmide kaudu. Praegusel hetkel on alanud ghOSt'i portimine sched_ext-ile. Google arendab samuti sched_ext porti ChromeOS-ile, sooviga kasutada seda scx_layered hübriidplanerija rakendamiseks viivituste vähendamiseks ilma reaalajas töötamiseks laiendusteta. Oculus arendab sched_ext porti Androidile.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster