Preskočiť na obsah
Táto stránka je zastaraná. Najnovšiu dokumentáciu nájdete na /configuration/sched-ext/

Návod na používanie sched-ext

Extensible Scheduler Class, alebo lepšie známy ako sched-ext, je funkcia Linuxového jadra, ktorá umožňuje implementáciu plánovačov kernelových vlákien v BPF (Berkeley Packet Filter) a ich dynamické načítavanie. V podstate to umožňuje koncovým používateľom meniť svoje plánovače v používateľskom priestore bez potreby zostavovať ďalšie jadro len kvôli odlišnému plánovaču.

Metódy na spustenie a správu plánovačov

Section titled “Metódy na spustenie a správu plánovačov”
  • Plánovače sa nachádzajú v balíkoch scx-scheds a scx-scheds-git.
    Terminal window
    # Stabilná vetva
    sudo pacman -S scx-scheds
    # Vývojová vetva (Táto vetva obsahuje najnovšie zmeny
    # a môže obsahovať plánovač, ktorý ešte nebol vydaný.)
    sudo pacman -S scx-scheds-git
  • Ak chcete spustiť plánovač, otvorte terminál a zadajte nasledujúci príkaz:
    Príklad spustenia rusty
    sudo scx_rusty

Týmto sa spustí plánovač rusty a odpojí sa predvolený plánovač.

Ak chcete zastaviť plánovač. Stlačte CTRL + C a plánovač sa zastaví a predvolený plánovač jadra sa opäť ujme správy.

Balík scx obsahuje službu systemd, ktorá používa konfiguráciu uvedenú v súbore /etc/default/scx.

V tomto konfiguračnom súbore môžete určiť plánovač, ktorý služba spúšťa, a voliteľne zahrnúť vlastné príznaky pre požadovaný plánovač.

  • Ak chcete zmeniť plánovač spúšťaný službou, jednoducho upravte riadok SCX_SCHEDULER= na plánovač, ktorý chcete štandardne spúšťať.

    • Príklad
      SCX_SCHEDULER=scx_lavd
  • Pridávanie príznakov

    • Odkomentujte SCX_FLAGS a pridajte požadované príznaky.
      Príklad
      SCX_FLAGS='--performance'

Teraz môžete spúšťať/povoliť/zastaviť plánovač, akoby to bola akákoľvek iná služba systemd.

Nižšie nájdete stručný návod, ako ju spravovať.

Povolenie a spustenie služby systemd
sudo systemctl enable --now scx
Jednorazové spustenie plánovača prostredníctvom služby systemd
sudo systemctl start scx
Zastavenie plánovača SCX pomocou služby systemd
sudo systemctl stop scx

Viac informácií o tejto službe: Služba Sched-ext systemd

Ako už názov napovedá, ide o nástroj, ktorý funguje ako loader a správca pre framework sched-ext pomocou rozhrania D-Bus.

Hoci nevyžaduje systemd, stále sa dá používať v spojení s ním. Pozrite si prechodový sprievodca pre referenciu)

  • Má schopnosť zastaviť, spustiť, reštartovať, čítať informácie o scx plánovači a ďalšie.
    • Na komunikáciu s ním môžete použiť nástroje ako dbus-send alebo gdbus.
  • Tento návod vysvetľuje, ako používať scx_loader s príkazom dbus-send.
    • Spustenie scx_rusty s jeho predvolenými argumentmi
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StartScheduler string:scx_rusty uint32:0
    • Spustenie plánovača s argumentmi
      # Tento príklad spúšťa scx_bpfland s nasledujúcimi príznakmi: -k -c 0
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StartSchedulerWithArgs string:scx_bpfland array:string:"-k","-c","0"
    • Zastavenie aktuálne spustenej plánovača
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StopScheduler
    • Prepnutie na iný plánovač v režime 2
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchScheduler string:scx_lavd uint32:2
      # Toto prepne na scx_lavd s režimom plánovača 2, čo znamená, že spustí LAVD v úspornom režime
    • Prepnutie na iný plánovač s argumentmi
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchSchedulerWithArgs string:scx_bpfland array:string:"-k","-c","0"
    • Získanie aktuálne spustenej plánovača
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Properties.Get string:org.scx.Loader string:CurrentScheduler
    • Získanie zoznamu podporovaných plánovačov
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Properties.Get string:org.scx.Loader string:SupportedSchedulers

Plánovače scx sú prístupné a konfigurovateľné pomocou úplne nového scx_loader.

Keďže existuje mnoho plánovačov, z ktorých si môžete vybrať, chceme vám poskytnúť stručný úvod do dostupných plánovačov.

Neváhajte nahlásiť akékoľvek problémy alebo spätnú väzbu na ich GitHub, na ktorý sa odkazuje nižšie.

Vyvinutý: Andrea Righi (arighi GitHub)

Plánovač sched_ext založený na vruntime, ktorý uprednostňuje interaktívne pracovné zaťaženia. Vysoko flexibilný a ľahko prispôsobiteľný.

Bpfland pri rozhodovaní o tom, ktoré jadrá použiť, berie do úvahy ich rozloženie vyrovnávacej pamäte a ktoré jadrá zdieľajú rovnakú vyrovnávaciu pamäť L2/L3, čo vedie k menšiemu počtu zlyhaní vyrovnávacej pamäte = vyšší výkon.

Prípady použitia:

  • Hranie hier
  • Používanie desktopu
  • Produkcia multimédií/zvuku
  • Skvelá interaktivita pri intenzívnych pracovných zaťaženiach
  • Úspora energie
  • Serverové pracovné zaťaženia

Vyvinutý: Andrea Righi (arighi GitHub)

Plánovač, ktorý sa zameriava na zabezpečenie spravodlivosti medzi úlohami a predvídateľnosti výkonu. Tento plánovač je predstavený ako náhrada režimu “lowlatency” v scx_bpfland.

Prípady použitia:

  • Hranie hier
  • Pracovné zaťaženia citlivé na latenciu, ako sú multimédiá alebo spracovanie zvuku v reálnom čase
  • Potreba odozvy v preťažených situáciách
  • Konzistencia vo výkone

Vyvinutý: Changwoo Min (multics69 GitHub).

Stručný úvod do LAVD od Changwoo:

LAVD je nový algoritmus plánovania, ktorý sa stále vyvíja. Je motivovaný hernými pracovnými zaťaženiami, ktoré sú kritické z hľadiska latencie a náročné na komunikáciu. Jeho cieľom je minimalizovať špičky latencie pri zachovaní celkovo dobrej priepustnosti a spravodlivého využívania času CPU medzi úlohami.

Prípady použitia:

  • Hranie hier
  • Produkcia zvuku
  • Pracovné zaťaženia citlivé na latenciu
  • Používanie desktopu
  • Skvelá interaktivita pri intenzívnych pracovných zaťaženiach
  • Úspora energie

Jednou z hlavných a skvelých schopností, ktoré LAVD obsahuje, je Core Compaction, čo bez technických detailov znamená: Keď je využitie CPU < 50 %, aktuálne aktívne jadrá budú bežať dlhšie a na vyššej frekvencii. Medzitým nečinné jadrá zostanú v stave C-State (Spánok) oveľa dlhšie, čím sa dosiahne nižšia celková spotreba energie.

Vyvinutý: David Vernet (Byte-Lab GitHub)

Rusty ponúka širokú škálu funkcií, ktoré rozširujú jeho možnosti a poskytujú väčšiu flexibilitu pre rôzne prípady použitia. Jednou z týchto funkcií je laditeľnosť, ktorá vám umožňuje prispôsobiť Rusty tak, aby vyhovoval vašim preferenciám a špecifickým požiadavkám.

Prípady použitia:

  • Hranie hier
  • Pracovné zaťaženia citlivé na latenciu
  • Používanie desktopu
  • Produkcia multimédií/zvuku
  • Pracovné zaťaženia citlivé na latenciu
  • Skvelá interaktivita pri intenzívnych pracovných zaťaženiach
  • Úspora energie

Ak sa chcete podrobnejšie pozrieť na to, čo sa dá pre Rusty ladiť. Pozrite si stránku s pomocou

scx_rusty --help

Citáty od Changwoo Min:

  • V režime autopilot plánovač upravuje svoj režim napájania Powersave, Balanced alebo Performance na základe zaťaženia systému, konkrétne využitia CPU.

  • Autopower: Automaticky rozhoduje o režime napájania plánovača na základe energetického profilu systému, t. j. EPP (Energy Performance Preference).

Terminal window
# Autopower sa dá aktivovať nasledujúcim príznakom:
--autopower
# napr.:
scx_lavd --autopower

Ak chcete zakázať/zastaviť ananicy-cpp, spustite nasledujúci príkaz:

Terminal window
systemctl disable --now ananicy-cpp

Prechod zo scx.service na scx_loader: Komplexný sprievodca

Section titled “Prechod zo scx.service na scx_loader: Komplexný sprievodca”

Najprv začnime s podrobným porovnaním štruktúry súboru scx.service oproti štruktúre konfiguračného súboru scx_loader.

Ak ste predtým mali spustený LAVD so starou službou scx.service, ako je tento príklad nižšie:

Štruktúra súboru scx.service
# Zoznam scx_plánovačov: scx_bpfland scx_central scx_flash scx_lavd scx_layered scx_nest scx_qmap scx_rlfifo scx_rustland scx_rusty scx_simple scx_userland
SCX_SCHEDULER=scx_lavd
# Nastavenie vlastných príznakov pre plánovač
SCX_FLAGS='--performance'

Potom bude ekvivalent v konfiguračnom súbore scx_loader vyzerať takto:

Štruktúra súboru scx_loader
default_sched = "scx_lavd"
default_mode = "Auto"
[scheds.scx_lavd]
auto_mode = ["--performance"]

Viac informácií o tom, ako nakonfigurovať súbor scx_loader

Pre jednoduchý prechod zo systemd služby scx na nový nástroj scx_loader postupujte podľa nižšie uvedeného sprievodcu.

  1. Zakázanie scx.service v prospech scx_loader.service
    systemctl disable --now scx.service && systemctl enable --now scx_loader.service
  2. Vytvorenie konfiguračného súboru pre scx_loader a pridanie predvolenej štruktúry
    # Editor Micro vytvorí nový súbor.
    sudo micro /etc/scx_loader.toml
    # Pridajte nasledujúce riadky:
    default_sched = "scx_bpfland" # Upravte tento riadok na plánovač, ktorý chcete, aby scx_loader spúšťal pri štarte
    default_mode = "Auto" # Možné hodnoty: "Auto", "Gaming", "LowLatency", "PowerSave".
    # Stlačením CTRL + S uložíte zmeny a stlačením CTRL + Q ukončíte Micro.
  3. Reštartovanie scx_loader
    systemctl restart scx_loader.service
    • Hotovo, scx_loader teraz načíta a spustí požadovaný plánovač.
  • Kontrola stavu služby
    systemctl status scx_loader.service
  • Zobrazenie všetkých záznamov denníka služby
    journalctl -u scx_loader.service
  • Zobrazenie iba denníkov aktuálnej relácie.
    journalctl -u scx_loader.service -b 0
  • Rozšírené protokolovanie

Ak chcete získať podrobnejší denník, postupujte podľa týchto krokov.

  1. Úprava súboru služby
    sudo systemctl edit scx_loader.service
  2. Pridajte nasledujúci riadok pod sekciu [Service]
    Environment=RUST_LOG=trace
  3. Reštartovanie služby
    sudo systemctl restart scx_loader.service
  • Znova skontrolujte denníky, kde nájdete podrobnejšie informácie na ladenie.

Prečo plánovač X funguje horšie ako ostatné?

Section titled “Prečo plánovač X funguje horšie ako ostatné?”
  • Pri ich porovnávaní treba zvážiť mnoho premenných. Napríklad, ako merajú váhu úlohy? Uprednostňujú interaktívne úlohy pred neinteraktívnymi? V konečnom dôsledku to závisí od ich konštrukčných rozhodnutí.

Prečo všetci hovoria, že tento plánovač X je najlepší pre prípad X, ale pre mňa nefunguje tak dobre?

Section titled “Prečo všetci hovoria, že tento plánovač X je najlepší pre prípad X, ale pre mňa nefunguje tak dobre?”
  • Rovnako ako v predchádzajúcej odpovedi, výber CPU a jeho konštrukcia, ako je rozloženie jadier, spôsob zdieľania vyrovnávacej pamäte medzi jadrami a ďalšie súvisiace faktory, môžu viesť k menej efektívnemu fungovaniu plánovača.
  • Preto je jednou z hlavných výhod frameworku sched-ext možnosť výberu, takže sa nebojte vyskúšať niektorý a zistiť, ktorý najlepšie vyhovuje vášmu prípadu použitia. Príklady: stabilita fps, maximálny výkon, odozva pri intenzívnych pracovných zaťaženiach atď.

Prípady použitia týchto plánovačov sú si dosť podobné… prečo je to tak?

Section titled “Prípady použitia týchto plánovačov sú si dosť podobné… prečo je to tak?”
  • Primárne preto, že sú to viacúčelové plánovače, čo znamená, že dokážu zvládnuť rôzne pracovné zaťaženia, aj keď v každej oblasti nemusia vynikať.

  • Ak chcete zistiť, ktorý plánovač vám najviac vyhovuje, neexistuje lepšia rada, ako si ho sami vyskúšať.

Chýba mi plánovač, o ktorom sa niektorí používatelia zmieňujú alebo ho testujú na serveri CachyOS Discord

Section titled “Chýba mi plánovač, o ktorom sa niektorí používatelia zmieňujú alebo ho testujú na serveri CachyOS Discord”

Uistite sa, že používate vývojovú verziu balíka scx-scheds s názvom scx-scheds-git

  • Jedným z dôvodov bude, že tento plánovač je veľmi nový a používatelia ho v súčasnosti testujú, preto ešte nebol pridaný do balíka scx-scheds-git.

Prečo sa plánovač zrazu zrútil? Je nestabilný?

Section titled “Prečo sa plánovač zrazu zrútil? Je nestabilný?”
  • Môže existovať niekoľko dôvodov, prečo sa to stalo:
    • Jedným z najčastejších dôvodov je, že ste používali ananicy-cpp spolu s plánovačom. Preto sme pridali toto upozornenie
    • Ďalším dôvodom by mohlo byť, že pracovné zaťaženie, ktoré ste spúšťali, prekročilo limity a kapacitu plánovača, čo spôsobilo jeho zastavenie.
      • Príklad nerozumného pracovného zaťaženia: hackbench
    • Alebo очевидnejší dôvod, našli ste chybu v plánovači, ak áno. Nahláste ju ako problém v ich GitHub alebo im dajte vedieť o tom na kanáli CachyOS Discord sched-ext

Predtým som používal scx_loader v GUI Kernel Manager. Musím ešte postupovať podľa krokov prechodu?

Section titled “Predtým som používal scx_loader v GUI Kernel Manager. Musím ešte postupovať podľa krokov prechodu?”
  • V tomto konkrétnom prípade to nie je potrebné, pretože Kernel Manager už spracováva proces prechodu.
    • Pokiaľ ste predtým nepridali vlastné príznaky v /etc/default/scx a stále ich chcete používať.

Ak sa chcete dozvedieť viac o frameworku sched-ext. Pozrite si odkazy uvedené nižšie.