Přeskočit na obsah
Tato stránka je zastaralá. Podívejte se prosím na nejnovější dokumentaci na /configuration/sched-ext/

Návod na sched-ext

Extensible Scheduler Class, neboli lépe známý jako sched-ext, je funkce linuxového kernelu, která umožňuje implementovat plánovače vláken kernelu v BPF (Berkeley Packet Filter) a dynamicky je načítat. V podstatě to umožňuje koncovým uživatelům měnit své plánovače v uživatelském prostoru bez nutnosti sestavovat další kernel jen pro jiný plánovač.

Metody pro spouštění a správu plánovačů

Sekce “Metody pro spouštění a správu plánovačů”
  • Plánovače naleznete v balíčcích scx-scheds a scx-scheds-git.
    Terminal window
    # Stabilní větev
    sudo pacman -S scx-scheds
    # Nejnovější vývojová větev (Tato větev obsahuje nejnovější změny
    # a může obsahovat plánovač, který ještě nebyl vydán.)
    sudo pacman -S scx-scheds-git

Spuštění plánovače v terminálu

Sekce “Spuštění plánovače v terminálu”
  • Pro spuštění plánovače otevřete terminál a zadejte následující příkaz:
    Příklad spuštění rusty
    sudo scx_rusty

Tím se spustí plánovač rusty a odpojí se výchozí plánovač.

Pro zastavení plánovače stiskněte CTRL + C. Plánovač se poté zastaví a opět převezme řízení výchozí plánovač kernelu.

Balíček scx obsahuje službu systemd, která používá konfiguraci specifikovanou v souboru /etc/default/scx.

V tomto konfiguračním souboru můžete specifikovat plánovač, který služba spouští, a volitelně zahrnout vlastní příznaky pro požadovaný plánovač.

  • Pokud chcete změnit plánovač spouštěný službou, jednoduše upravte řádek SCX_SCHEDULER= na plánovač, který chcete spouštět ve výchozím nastavení.

    • Příklad
      SCX_SCHEDULER=scx_lavd
  • Přidání příznaků

    • Odkomentujte SCX_FLAGS a přidejte požadované příznaky.
      Příklad
      SCX_FLAGS='--performance'

Nyní můžete plánovač spouštět/povolovat/zastavovat jako jakoukoli jinou službu systemd.

Níže se podívejte na stručný návod, jak jej spravovat.

Povolení a spuštění služby systemd
sudo systemctl enable --now scx
Jednorázové spuštění plánovače prostřednictvím služby systemd
sudo systemctl start scx
Zastavení plánovače SCX pomocí služby systemd
sudo systemctl stop scx

Pro více informací o této službě: Sched-ext systemd service

Jak název napovídá, jedná se o nástroj, který funguje jako zavaděč a správce pro framework sched-ext pomocí rozhraní D-Bus.

Ačkoliv nevyžaduje systemd, může být stále používán ve spojení s ním. Pro referenci se podívejte na průvodce přechodem)

  • Má schopnost zastavit, spustit, restartovat, číst informace o plánovači scx a další.
    • Můžete použít nástroje jako dbus-send nebo gdbus pro komunikaci s ním.
  • Tento průvodce vysvětluje, jak používat scx_loader s příkazem dbus-send.
    • Spuštění scx_rusty s výchozími argumenty
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StartScheduler string:scx_rusty uint32:0
    • Spuštění plánovače s argumenty
      # Tento příklad spouští scx_bpfland s následujícími příznaky: -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"
    • Zastavení aktuálně běžícího plánovače
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StopScheduler
    • Přepnutí na jiný plánovač v režimu 2
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchScheduler string:scx_lavd uint32:2
      # Tímto se přepne na scx_lavd s režimem plánovače 2, což znamená, že se LAVD spustí v režimu úspory energie
    • Přepnutí na jiný plánovač s argumenty
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchSchedulerWithArgs string:scx_bpfland array:string:"-k","-c","0"
    • Zjištění aktuálně běžícího plánovače
      dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Properties.Get string:org.scx.Loader string:CurrentScheduler
    • Získání seznamu podporovaných plánovačů
      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 lze přistupovat a konfigurovat pomocí zbrusu nového scx_loaderu.

Představení hlavních plánovačů

Sekce “Představení hlavních plánovačů”

Jelikož je na výběr mnoho plánovačů, chceme vám poskytnout malé představení těch, které jsou k dispozici.

Neváhejte nahlásit jakýkoli problém nebo zpětnou vazbu v repozitáři daného plánovače.

Vyvinul: Andrea Righi (arighi GitHub)

Plánovač sched_ext založený na vruntime, který upřednostňuje interaktivní úlohy. Vysoce flexibilní a snadno přizpůsobitelný.

Když Bpfland rozhoduje, která jádra použít, bere v úvahu jejich uspořádání mezipaměti a která jádra sdílejí stejnou mezipaměť L2/L3, což vede k menšímu počtu minutí mezipaměti = vyššímu výkonu.

Případy použití:

  • Hraní her
  • Použití na desktopu
  • Multimediální/audio produkce
  • Skvělá interaktivita při náročných úlohách
  • Úspora energie
  • Server (Vyžaduje server_mode s scx_loaderem)

Vyvinul: Andrea Righi (arighi GitHub)

Sdílí podobnosti s bpfland, vytvořen s úmyslem být snadno čitelný a srozumitelný díky své implementaci v uživatelském prostoru.

Mějte na paměti, že při použití plánovače v uživatelském prostoru dochází k mírnému snížení propustnosti. Ačkoliv rustland má možnost bezproblémové integrace se sofistikovanými knihovnami, nástroji pro sledování, externími službami (např. AI) atd.

Případy použití:

  • Úlohy s nízkou latencí (hraní her, videokonference a živé streamování)
  • Použití na desktopu

Vyvinul: Andrea Righi (arighi GitHub)

Plánovač, který se zaměřuje na zajištění spravedlnosti mezi úlohami a předvídatelnosti výkonu. Tento plánovač je představen jako náhrada za režim “lowlatency” v scx_bpfland.

Případy použití:

  • Hraní her
  • Úlohy citlivé na latenci, jako je multimediální nebo real-time zpracování zvuku
  • Potřeba odezvy v přetížených situacích
  • Konzistence výkonu
  • Server (Vyžaduje server_mode s scx_loaderem)

Vyvinul: Changwoo Min (multics69 GitHub).

Stručné představení LAVD od Changwoo:

LAVD je nový plánovací algoritmus, který je stále ve vývoji. Je motivován herními úlohami, které jsou kritické z hlediska latence a náročné na komunikaci. Cílem je minimalizovat špičky latence při zachování celkově dobré propustnosti a spravedlivého využití času CPU mezi úlohami.

Případy použití:

  • Hraní her
  • Audio produkce
  • Úlohy citlivé na latenci
  • Použití na desktopu
  • Skvělá interaktivita při náročných úlohách
  • Úspora energie

Jednou z hlavních a úžasných schopností, které LAVD zahrnuje, je Kompakce jader. což, aniž bychom zabíhali do technických detailů: Když je využití CPU < 50 %, aktuálně aktivní jádra poběží déle a na vyšší frekvenci. Mezitím nečinná jádra zůstanou ve stavu C-State (spánek) po mnohem delší dobu, čímž se dosáhne nižší celkové spotřeby energie.

Vyvinul: David Vernet (Byte-Lab GitHub)

Rusty nabízí širokou škálu funkcí, které vylepšují jeho schopnosti a poskytují větší flexibilitu pro různé případy použití. Jednou z těchto funkcí je laditelnost, která vám umožňuje přizpůsobit Rusty vašim preferencím a specifickým požadavkům.

Případy použití:

  • Hraní her
  • Úlohy citlivé na latenci
  • Použití na desktopu
  • Multimediální/audio produkce
  • Úlohy citlivé na latenci
  • Skvělá interaktivita při náročných úlohách
  • Úspora energie

Pro podrobnější pohled na to, co lze pro Rusty ladit, se podívejte na stránku nápovědy.

scx_rusty --help

Vyvinul: Daniel Hodges (hodgesds GitHub)

Univerzální plánovač, který se zaměřuje na vyvažování zátěže “pick two” mezi LLC. Udržuje vysokou lokalitu mezipaměti a zachování práce, přičemž poskytuje rozumnou latenci.

Případy použití:

  • Server (Vyžaduje server_mode s scx_loaderem)
  • Desktopová prostředí
  • Hraní her (s určitým ručním laděním)

Vyvinul: Andrea Righi (arighi Github)

scx_tickless je serverově orientovaný plánovač určený pro cloud computing, virtualizaci a úlohy vysoce výkonného počítání.

Plánovač funguje tak, že směruje všechny události plánování přes fond primárních CPU určených pro zpracování těchto událostí. To umožňuje zakázat tik plánovače na ostatních CPU, čímž se snižuje šum operačního systému.

Případy použití:

  • Cloud computing
  • Virtualizace
  • Úlohy vysoce výkonného počítání
  • Server (Vyžaduje server_mode s scx_loaderem)

LAVD Autopilot & Autopower

Sekce “LAVD Autopilot & Autopower”

Citace od Changwoo Min:

  • V režimu autopilota si plánovač upravuje svůj napájecí režim Powersave, Balanced nebo Performance na základě zátěže systému, konkrétně využití CPU

  • Autopower: Automaticky rozhoduje o napájecím režimu plánovače na základě energetického profilu systému, tzv. EPP (Energy Performance Preference).

Terminal window
# Autopower lze aktivovat následujícím příznakem:
--autopower
# např:
scx_lavd --autopower

Pro zakázání/zastavení ananicy-cpp spusťte následující příkaz:

Terminal window
systemctl disable --now ananicy-cpp

Přechod z scx.service na scx_loader: Komplexní průvodce

Sekce “Přechod z scx.service na scx_loader: Komplexní průvodce”

Začněme nejprve podrobným porovnáním struktury souboru scx.service se strukturou konfiguračního souboru scx_loaderu.

Pokud jste dříve měli spuštěný LAVD se starou službou scx.service jako v příkladu níže:

Struktura souboru scx.service
# Seznam scx_plánovačů: 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
# Nastavení vlastních příznaků pro plánovač
SCX_FLAGS='--performance'

Pak ekvivalent v konfiguračním souboru scx_loaderu bude vypadat takto:

Struktura souboru scx_loaderu
default_sched = "scx_lavd"
default_mode = "Auto"
[scheds.scx_lavd]
auto_mode = ["--performance"]

Pro více informací o tom, jak konfigurovat soubor scx_loaderu

Následujte níže uvedený průvodce pro snadný přechod ze systémové služby scx na nový nástroj scx_loader.

  1. Zakázání scx.service ve prospěch scx_loader.service
    systemctl disable --now scx.service && systemctl enable --now scx_loader.service
  2. Vytvoření konfiguračního souboru pro scx_loader a přidání výchozí struktury
    # Editor Micro vytvoří nový soubor.
    sudo micro /etc/scx_loader.toml
    # Přidejte následující řádky:
    default_sched = "scx_bpfland" # Upravte tento řádek na plánovač, který chcete, aby scx_loader spustil při startu
    default_mode = "Auto" # Možné hodnoty: "Auto", "Gaming", "LowLatency", "PowerSave".
    # Stiskněte CTRL + S pro uložení změn a CTRL + Q pro ukončení Micro.
  3. Restartování scx_loaderu
    systemctl restart scx_loader.service
    • Hotovo, scx_loader nyní načte a spustí požadovaný plánovač.
  • Kontrola stavu služby
    systemctl status scx_loader.service
  • Zobrazení všech záznamů v logu služby
    journalctl -u scx_loader.service
  • Zobrazení pouze logů aktuální relace.
    journalctl -u scx_loader.service -b 0
  • Pokročilé logování

Pro získání podrobnějšího logu postupujte podle těchto kroků.

  1. Upravte soubor služby
    sudo systemctl edit scx_loader.service
  2. Přidejte následující řádek pod sekci [Service]
    Environment=RUST_LOG=trace
  3. Restartujte službu
    sudo systemctl restart scx_loader.service
  • Znovu zkontrolujte logy pro podrobnější informace k ladění.

Proč plánovač X funguje hůře než jiný?

Sekce “Proč plánovač X funguje hůře než jiný?”
  • Při porovnávání je třeba zvážit mnoho proměnných. Například, jak měří váhu úlohy? Upřednostňují interaktivní úlohy před neinteraktivními? Nakonec to závisí na jejich návrhových rozhodnutích.

Proč všichni říkají, že tento plánovač X je nejlepší pro případ Y, ale mně nefunguje tak dobře?

Sekce “Proč všichni říkají, že tento plánovač X je nejlepší pro případ Y, ale mně nefunguje tak dobře?”
  • Stejně jako v předchozí odpovědi, volba CPU a jeho design, jako je uspořádání jader, způsob sdílení mezipaměti mezi jádry a další související faktory, mohou vést k tomu, že plánovač pracuje méně efektivně.
  • Proto je jednou z hlavních předností frameworku sched-ext možnost volby, takže se nebojte nějaký vyzkoušet a zjistit, který nejlépe vyhovuje vašemu případu použití. Příklady: stabilita fps, maximální výkon, odezva při náročných úlohách atd.

Případy použití těchto plánovačů jsou si dost podobné… proč tomu tak je?

Sekce “Případy použití těchto plánovačů jsou si dost podobné… proč tomu tak je?”
  • Především proto, že se jedná o víceúčelové plánovače, což znamená, že mohou vyhovět různým úlohám, i když nemusí vynikat v každé oblasti.

  • Abyste zjistili, který plánovač vám nejlépe vyhovuje, není lepší rady, než si ho sami vyzkoušet.

Chybí mi plánovač, o kterém někteří uživatelé mluví nebo ho testují na Discord serveru CachyOS

Sekce “Chybí mi plánovač, o kterém někteří uživatelé mluví nebo ho testují na Discord serveru CachyOS”

Ujistěte se, že používáte nejnovější vývojovou verzi balíčku scx-scheds s názvem scx-scheds-git

  • Jedním z důvodů bude, že tento plánovač je velmi nový a je v současné době testován uživateli, a proto ještě nebyl přidán do balíčku scx-scheds-git.

Proč se plánovač náhle zhroutil? Je nestabilní?

Sekce “Proč se plánovač náhle zhroutil? Je nestabilní?”
  • Může existovat několik důvodů, proč se to stalo:
    • Jedním z nejčastějších důvodů je, že jste používali ananicy-cpp souběžně s plánovačem. Proto jsme přidali toto varování
    • Dalším důvodem může být, že zátěž, kterou jste spouštěli, překročila limity a kapacitu plánovače, což způsobilo jeho zastavení.
      • Příklad nerozumné zátěže: hackbench
    • Nebo zjevnější důvod, našli jste chybu v plánovači, pokud ano. Nahlaste ji prosím jako problém v jejich GitHubu nebo jim o tom dejte vědět v kanálu sched-ext na Discordu CachyOS

Dříve jsem používal scx_loader v GUI Kernel Manageru. Musím stále postupovat podle kroků přechodu?

Sekce “Dříve jsem používal scx_loader v GUI Kernel Manageru. Musím stále postupovat podle kroků přechodu?”
  • V tomto konkrétním případě to není nutné, protože Kernel Manager již proces přechodu zvládá.
    • Pokud jste dříve nepřidali vlastní příznaky do /etc/default/scx a stále je chcete používat.

Pokud se chcete dozvědět více o frameworku sched-ext, podívejte se na níže uvedené odkazy.