Preskočiť na obsah

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 Package 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

  • 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

Spustenie plánovača v termináli

  • 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.

Služba systemd

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

scx_loader

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

CachyOS Kernel Manager

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

Úvod do hlavných plánovačov

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.

scx_bpfland

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

scx_flash

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

scx_lavd

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.

scx_rusty

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

Všeobecné odporúčania

LAVD Autopilot & Autopower

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

Zakázanie ananicy-cpp

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

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č.

Ladenie v scx_loader

  • 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.

FAQ

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?

  • 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?

  • 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

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ý?

  • 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?

  • 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ť.

Získajte viac informácií

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