Zpět na domů

sched_ext: BPF plánovače v Linuxu 6.12

sched_ext v Linuxu 6.12 zavádí dynamické BPF politiky plánování úloh, oddělujíc logiku od jádra. Popsány háky enqueue/dispatch, příklady scx_horoscope/lavd/rusty, benchmarky a scénáře použití.

BPF politiky sched_ext v Linuxu: od experimentů k produkci
Advertisement 728x90

# sched_ext v jádře Linuxu 6.12: dynamické plánovače na BPF

V vydání jádra Linuxu 6.12 se objevil třída plánovačů sched_ext, která umožňuje dynamicky nahrazovat logiku distribuce úloh prostřednictvím BPF programů. To eliminuje potřebu patchů a překompilace jádra pro experimenty s algoritmy. Politiky se načítají z uživatelského prostoru, jádro zajišťuje bezpečnost mechanismem návratu k SCHED_NORMAL při selháních.

Třída sched_ext rozděluje odpovědnosti: jádro spravuje fronty dispečerizace (DSQ), migraci úloh a stav, BPF politika rozhoduje o klasifikaci, pořadí a kvantu času. Při probuzení úlohy se volá hook enqueue(), při uvolnění jádra — dispatch().

Životní cyklus úlohy v sched_ext

Úloha se probouzí prostřednictvím try_to_wake_up(), politika analyzuje její charakteristiky: vzorce probuzení, využití CPU/IO, cgroup, přítomnost RT politik (SCHED_FIFO, SCHED_RR). Politika umístí úlohu do globální nebo lokální fronty, využívá virtuální čas pro priority.

Google AdInline article slot

V dispatch() se úloha extrahuje, předá se jádru prostřednictvím scx_bpf_dispatch() s kvantem v nanosekundách. Migrace se iniciuje scx_bpf_kick_cpu() pro vyrovnání zátěže nebo lokalitu cache.

Fronty DSQ fungují v režimu FIFO nebo prioritním v závislosti na metodě vložení:

  • scx_bpf_dispatch() — FIFO sémantika.
  • scx_bpf_dispatch_vtime() — řazení podle vtime.

Interní skóre (score) politiky neovlivňuje jádrové priority (nice, prio).

Google AdInline article slot

Příklad: scx_horoscope jako demonstrace možností

Projekt scx_horoscope využívá astrologická data pro úpravu kvantů, ilustruje vzorec sched_ext. Každých 60 sekund se počítají polohy planet, retrogradita a fáze Měsíce, generují se koeficienty.

Klasifikace úloh podle:

  • RT politik.
  • Vzorců probuzení.
  • Využití CPU/IO.
  • cgroup.

Základní kvant se upravuje multiplikátory: znamení zvěrokruhu zvyšují/snižují pro typy úloh, retrogradita — penalizace 50 %, úplněk — bonus pro interaktivní. Kvant je omezen min_slice_ns a max_slice_ns.

Google AdInline article slot

Jedná se o vzdělávací příklad: reálné výpočty, stabilní provoz, ale bez vědeckého základu pro produkci.

Praktické plánovače na sched_ext

Ekosystém scx zahrnuje produkčně orientované politiky:

  • scx_lavd (Latency-Aware Virtual Deadline): virtuální deadliny podle vzorců probuzení, snížení 99. percentilu zpoždění o 15–30 % oproti CFS na desktopech.
  • scx_rusty: NUMA optimalizace, minimalizace migrací, zohlednění tepelných limitů pro servery.
  • scx_flash: ML predikce z user-space přes sdílenou paměť.

Cykly vývoje se zkrátily na hodiny: sestavení, načtení, metriky, iterace bez restartu.

Nástroje pro benchmarkování

Hodnocení prostřednictvím:

  • /sys/kernel/sched_ext/ — metriky dispatch, migrací.
  • bpftrace — trasování událostí.
  • perf sched — zpoždění kontextových přepnutí.
  • cyclictest — ocasové zpoždění.

Zaměření na percentily, ne průměry: ocasy jsou kritické pro responzivitu.

Scénáře použití:

  • Herní servery: zaručený kvant pro logiku, izolace od pozadí.
  • Vestavěné systémy: seskupení úloh pro snížení frekvence přepnutí.
  • Cloud: záruky propustnosti nad cgroup.
  • Audio/video: rezervace jader, minimalizace jitteru.

Omezení a vývoj

Overhead z dispatch volání roste při vysoké frekvenci přepnutí. Logické chyby degradují výkon bez paniky. API se vyvíjí, status experimentální.

Co je důležité:

  • sched_ext v 6.12 s CONFIG_SCHED_CLASS_EXT.
  • BPF politiky pro rychlé prototypování.
  • Návrat k SCHED_NORMAL při selháních.
  • Zaměření na percentily v benchmarkách.
  • Použití v latency-kritických a NUMA scénářích.

— Editorial Team

Advertisement 728x90

Číst dál