Přeskočit na obsah

Návod k sched-ext

Rozšiřitelná třída plánovače, známější jako sched-ext, je funkce jádra Linuxu, která umožňuje implementovat plánovače vláken jádra v BPF (Berkeley Package Filter) a dynamicky je načítat. V podstatě to koncovým uživatelům umožňuje měnit své plánovače v uživatelském prostoru bez nutnosti sestavovat další jádro jen kvůli jinému plánovači.

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

  • Plánovače lze nalézt v balíčcích scx-scheds a scx-scheds-git.
    Terminál
    # Stabilní větev
    sudo pacman -S scx-scheds
    # 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

  • Chcete-li spustit plánovač, 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í výchozí plánovač.

Chcete-li plánovač zastavit. Stiskněte CTRL + C a plánovač se zastaví a znovu převezme řízení výchozí plánovač jádra.

Služba Systemd

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

V tomto konfiguračním souboru můžete určit 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 spouštět/povolovat/zastavovat plánovač stejně jako jakoukoli jinou službu systemd.

Níže si prohlédněte stručný návod, jak ji spravovat.

Povolení a spuštění služby systemd
sudo systemctl enable --now scx
Spuštění plánovače jednorázově 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ě: Služba Sched-ext systemd

scx_loader

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.

I když nevyžaduje systemd, stále jej lze používat v kombinaci s ním. Podívejte se na průvodce přechodem pro referenci)

  • Má schopnost zastavit, spustit, restartovat, číst informace o scx plánovači a další.
    • Pro komunikaci s ním můžete použít nástroje jako dbus-send nebo gdbus.
  • Tento návod vysvětluje, jak používat scx_loader s příkazem dbus-send.
    • Spuštění scx_rusty s jeho 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ě spuštěné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ím se přepne na scx_lavd s režimem plánovače 2, což znamená, že se LAVD spustí v úsporném režimu
    • 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"
    • Získání aktuálně spuštěné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

Správce jádra CachyOS

K plánovačům scx lze přistupovat a konfigurovat je pomocí zcela nového scx_loaderu.

Úvod k hlavním plánovačům

Vzhledem k tomu, že existuje mnoho plánovačů, ze kterých si můžete vybrat, chceme vám poskytnout krátký úvod k dostupným plánovačům.

Neváhejte nahlásit jakýkoli problém nebo zpětnou vazbu na jejich GitHub uvedeném níže.

scx_bpfland

Vyvinul: Andrea Righi (arighi GitHub)

Plánovač sched_ext založený na vruntime, který upřednostňuje interaktivní pracovní zátěže. Vysoce flexibilní a snadno se přizpůsobí.

Při rozhodování o tom, která jádra použít, bere Bpfland v úvahu jejich rozložení mezipaměti a která jádra sdílejí stejnou mezipaměť L2/L3, což vede k menšímu počtu chyb mezipaměti = vyšší výkon.

Případy použití:

  • Hraní her
  • Použití na desktopu
  • Multimediální/audio produkce
  • Skvělá interaktivita při intenzivním zatížení
  • Úspora energie
  • Serverové pracovní zátěže

scx_flash

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 režimu „lowlatency“ v scx_bpfland.

Případy použití:

  • Hraní her
  • Pracovní zátěže citlivé na latenci, jako je multimediální nebo audio zpracování v reálném čase
  • Potřeba odezvy v situacích s nadměrným zatížením
  • Konzistence výkonu

scx_lavd

Vyvinul: Changwoo Min (multics69 GitHub).

Stručný úvod k LAVD od Changwoo:

LAVD je nový algoritmus plánování, který je stále ve vývoji. Jeho motivací jsou herní pracovní zátěže, které jsou kritické z hlediska latence a náročné na komunikaci. Jeho cílem je minimalizovat špičky latence při zachování celkově dobré propustnosti a spravedlivého využití času procesoru mezi úlohami.

Případy použití:

  • Hraní her
  • Audio produkce
  • Pracovní zátěže citlivé na latenci
  • Použití na desktopu
  • Skvělá interaktivita při intenzivním zatížení
  • Úspora energie

Jednou z hlavních a skvělých funkcí, které LAVD zahrnuje, je Core Compaction., což bez zabíhání do technických detailů znamená: Když je využití procesoru < 50 %, aktuálně aktivní jádra poběží déle a s vyšší frekvencí. Mezitím nečinná jádra zůstanou v C-stavu (spánek) mnohem déle, čímž se dosáhne menší celkové spotřeby energie.

scx_rusty

Vyvinul: David Vernet (Byte-Lab GitHub)

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

Případy použití:

  • Hraní her
  • Pracovní zátěže citlivé na latenci
  • Použití na desktopu
  • Multimediální/audio produkce
  • Pracovní zátěže citlivé na latenci
  • Skvělá interaktivita při intenzivním zatížení
  • Úspora energie

Pro podrobnější informace o tom, co lze u Rustyho ladit. Podívejte se na stránku nápovědy

scx_rusty --help

Obecná doporučení

LAVD Autopilot & Autopower

Citáty od Changwoo Min:

  • V režimu autopilota plánovač upravuje svůj režim napájení Úsporný, Vyvážený nebo Výkonný na základě zatížení systému, konkrétně využití procesoru

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

Terminál
# Autopower lze aktivovat pomocí následujícího příznaku:
--autopower
# např.:
scx_lavd --autopower

Zakázat ananicy-cpp

Chcete-li zakázat/zastavit ananicy-cpp, spusťte následující příkaz:

Terminál
systemctl disable --now ananicy-cpp

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

Nejprve začněme s podrobným porovnáním struktury souboru scx.service se strukturou konfiguračního souboru scx_loader.

Pokud jste dříve měli spuštěný LAVD se starou scx.service, jako v následujícím příkladu:

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 bude ekvivalent v konfiguračním souboru scx_loader vypadat takto:

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

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

Pro snadný přechod ze služby systemd scx na nový nástroj scx_loader postupujte podle níže uvedeného průvodce.

  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ý má scx_loader spouštět při spuštění
    default_mode = "Auto" # Možné hodnoty: "Auto", "Gaming", "LowLatency", "PowerSave".
    # Stisknutím CTRL + S uložte změny 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č.

Ladění v scx_loaderu

  • Kontrola stavu služby
    systemctl status scx_loader.service
  • Zobrazení všech záznamů protokolu služby
    journalctl -u scx_loader.service
  • Zobrazení pouze protokolů aktuální relace.
    journalctl -u scx_loader.service -b 0
  • Rozšířené protokolování

Chcete-li získat podrobnější protokol, postupujte podle těchto kroků.

  1. Úprava souboru služby
    sudo systemctl edit scx_loader.service
  2. Přidejte následující řádek do sekce [Service]
    Environment=RUST_LOG=trace
  3. Restartování služby
    sudo systemctl restart scx_loader.service
  • Znovu zkontrolujte protokoly pro podrobnější informace o ladění.

FAQ

Proč plánovač X funguje hůře než ostatní?

  • Při jejich 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? V konečném důsledku to závisí na jejich konstrukčních rozhodnutích.

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

  • Stejně jako v předchozí odpovědi, volba procesoru a jeho konstrukce, jako je rozložení jader, způsob sdílení mezipaměti mezi jádry a další související faktory, mohou vést k méně efektivnímu fungování plánovače.
  • Proto je jednou z hlavních výhod frameworku sched-ext možnost výběru, takže se nebojte vyzkoušet jeden a zjistit, který nejlépe vyhovuje vašemu případu použití. Příklady: stabilita fps, maximální výkon, odezva při intenzivním zatížení atd.

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

  • Především proto, že se jedná o víceúčelové plánovače, což znamená, že se dokážou přizpůsobit různým pracovním zátěžím, i když v každé oblasti nemusí vynikat.

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

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

Ujistěte se, že používáte 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 v současné době je testován uživateli, proto ještě nebyl přidán do balíčku scx-scheds-git.

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 společně s plánovačem. Proto jsme přidali toto varování
    • Dalším důvodem může být, že pracovní zátěž, kterou jste spouštěli, překročila limity a kapacitu plánovače, což způsobilo jeho zablokování.
      • Příklad nepřiměřené pracovní 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 ní dejte vědět na kanálu CachyOS Discord sched-ext

Dříve jsem používal scx_loader v GUI Správce jádra. Musím stále dodržovat kroky přechodu?

  • V tomto konkrétním případě to není nutné, protože Správce jádra již proces přechodu řeší.
    • Pokud jste dříve nepřidali vlastní příznaky do /etc/default/scx a stále je chcete používat.

Zjistěte více

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