Linus Torvalds ka shprehur gatishmërinë për të pranuar në bërthamën e Linux 6.11, i cili pritet të publikohet në fund të shtatorit, patches me implementimin e mekanizmit «sched_ext» (SCX), i cili lejon përdorimin e eBPF për krijimin e planifikuesve të CPU, duke mbuluar praktikisht të gjitha aspektet e planifikimit të ekzekutimit të detyrave dhe shpërndarjes së burimeve të CPU. Planifikues të tillë mund të ngarkohen dinamikisht dhe të ekzekutohen brenda bërthamës Linux në një makinë virtuale eBPF, në të cilën, falë përdorimit të JIT-kompilimit, bytecode përkthyer në udhëzime makinerie dhe ekzekutohet me performancë të kodit të kompiluara.
Patch-ët e propozuara realizojnë një klasë të re planifikimi SCHED_EXT, për të cilën prioriteti i thirrjes nga bërthama është vendosur midis klasave SCHED_IDLE dhe SCHED_NORMAL, çka nuk lejon që në BPF-handlers, të lidhura me SCHED_EXT, të ndikojnë në detyrat tashmë të lidhura me planifikuesin normal (SCHED_NORMAL), por jep mundësinë e lidhjes së detyrave të veçanta me SCHED_EXT ose kalimin e të gjitha proceseve me prioritet më të ulët se ekzekutimi në kohë reale për t'u përpunuar përmes tij. Nëse BPF-handlers nuk janë të lidhura me SCHED_EXT, atëherë të gjitha proceset e zhvendosura në klasën SCHED_EXT do të përpunohen përmes planifikuesit SCHED_NORMAL. Operimi i BPF-handlers reduktohet në analizimin e radhëve të detyrave që presin të ekzekutohen në CPU (një radhë globale dhe një radhë për secilën bërthamë CPU) dhe zgjedhjen e detyrës, të cilës duhet t'i jepen burimet e CPU kur një bërthamë CPU bëhet e lirë.
Mekanizmi sched_ext thjeshton krijimin e planifikuesve specifik për detyra të caktuara, ofron mundësinë për të eksperimentuar me teknika dhe strategji të ndryshme planifikimi, si dhe lejon krijimin e prototipave funksionalë të shpejtë dhe zëvendësimin e planifikuesve në fluks në infrastruktura pune. Për shembull, përmes sched_ext mund të krijohet një planifikues që merr parasysh specifikën e një aplikacioni të caktuar dhe ndryshon dinamikisht strategjinë e planifikimit të ekzekutimit të tij në varësi të gjendjes së sistemit dhe faktorëve të tjerë shtesë.
Aktualisht janë në zhvillim rreth dhjetë planifikuesish mbi bazën e sched_ext, logjika e planifikimit të detyrave të cilave përcaktohet në hapësirën e përdoruesit dhe ngarkohet në bërthamë në formën e programeve BPF:
- scx_layered â njĂ« planifikues hibrid detyrash qĂ« ndan detyrat nĂ« shtresa, pĂ«r tĂ« cilat aplikohet njĂ« strategji e veçantĂ« planifikimi. PĂ«r shembull, scx_layered lejon ndarjen nĂ« njĂ« shtresĂ« tĂ« veçantĂ« tĂ« disa detyrave pĂ«r tĂ« cilat do tĂ« sigurohen burime tĂ« garantuara CPU, ose rritjen e prioritetit tĂ« aplikacioneve tĂ« veçanta. Planifikuesi po zhvillohet nga kompania Meta. Logjika e gjeneratĂ«s BPF qĂ« punon nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit Ă«shtĂ« shkruar nĂ« gjuhĂ«n Rust.
- scx_rustland â njĂ« planifikues i optimizuar pĂ«r rritjen e prioritetit tĂ« detyrave interaktive nĂ« sfondin e detyrave qĂ« ngarkojnĂ« intensivisht CPU-nĂ«. PĂ«r shembull, nĂ« testin e nisjes sĂ« aplikacionit tĂ« lojĂ«s Terraria sĂ« bashku me ndĂ«rtimin e bĂ«rthamĂ«s, planifikuesi scx_rustland arriti tĂ« ofronte njĂ« FPS mĂ« tĂ« lartĂ« nĂ« lojĂ« sesa pĂ«rdorimi i planifikuesit standard EEVDF. Projekti zhvillohet nga njĂ« punonjĂ«s i kompanisĂ« Canonical. Logjika e gjeneratĂ«s BPF qĂ« punon nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit Ă«shtĂ« shkruar nĂ« gjuhĂ«n Rust.
- scx_lavd â implementimi i algoritmit tĂ« planifikimit tĂ« detyrave LAVD (Latency-criticality Aware Virtual Deadline), i cili merr parasysh rĂ«ndĂ«sinĂ« e uljes sĂ« vonesave pĂ«r detyra tĂ« caktuara dhe pĂ«rdor informacionin mbi zhvillimin e proceseve pĂ«r tĂ« vendosur mbi shpĂ«rndarjen e burimeve CPU. Planifikuesi po zhvillohet nga kompanitĂ« Igalia dhe Valve pĂ«r tĂ« ulur vonesat nĂ« lojrat kompjuterike dhe detyrat interaktive. Logjika e gjeneratĂ«s BPF qĂ« punon nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit Ă«shtĂ« shkruar nĂ« gjuhĂ«n Rust.
- scx_rusty, scx_rlfifo, scx_mitosis â shembuj planifikuesish me komponente nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit nĂ« gjuhĂ«n Rust, qĂ« realizojnĂ« balancimin midis grupeve tĂ« detyrave nĂ« varĂ«si tĂ« ngarkesĂ«s, njĂ« planifikues tĂ« thjeshtĂ« FIFO dhe njĂ« planifikues pĂ«r lidhjen e grupeve tĂ« detyrave me bĂ«rthamat e CPU.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland â shembuj planifikuesish me komponente nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit nĂ« gjuhĂ«n C, qĂ« ilustrojnĂ« mundĂ«si tĂ« ndryshme tĂ« sched-ext.
Mekanizmi sched_ext u propozuar fillimisht për shqyrtim nga zhvilluesit e bërthamës në vitin 2022, pas çka u publikuan gjashtë edita të patches. Megjithatë, pavarësisht mungesës së mbështetjes në bërthamën kryesore, për shpërndarjet Ubuntu, Arch Linux, Fedora dhe NixOS ka mundësi për të instaluar sched_ext nëpërmjet paketave shtesë. Kompania Canonical po shqyrton mundësinë e përfshirjes së komponentëve sched-ext në Ubuntu 24.10, ndërsa kompania Valve po punon për integrimin e sched_ext në Steam Deck. Në kompaninë Meta, planifikuesi i bazuar në sched_ext është tashmë në përdorim në infrastrukturën e punës.
Kompania Google po eksperimenton me përdorimin e kornizës së saj ghOSt, e cila lejon ndikuese të vendimeve të planifikuesit të detyrave përmes programeve BPF. Aktualisht ka filluar puna për portimin e ghOSt në sched_ext. Google gjithashtu po zhvillon portin e sched_ext për ChromeOS me qëllim që të përdorë planifikuesin hibrid scx_layered për të reduktuar vonesat pa përdorur zgjerime për të punuar në mënyrë në kohë reale. Kompania Oculus po zhvillon portin sched_ext për Android.
Burimi: opennet.ru
