# sched_ext w jądrze Linux 6.12: dynamiczne planery na BPF
W wydaniu jądra Linux 6.12 pojawiła się klasa planerów sched_ext, umożliwiająca dynamiczną wymianę logiki alokacji zadań za pomocą programów BPF. Dzięki temu nie trzeba stosować patchy ani ponownie kompilować jądra przy eksperymentach z algorytmami. Polityki są ładowane z przestrzeni użytkownika, a jądro zapewnia bezpieczeństwo mechanizmem powrotu do SCHED_NORMAL w razie awarii.
Klasa sched_ext dzieli odpowiedzialność: jądro zarządza kolejkami dyspozytorskimi (DSQ), migracją zadań i ich stanem, natomiast polityka BPF decyduje o klasyfikacji, randze i kwancie czasu. Po wybudzeniu zadania wywoływany jest hak enqueue(), przy zwolnieniu przez jądro — dispatch().
Cykl życia zadania w sched_ext
Zadanie jest wybudzane za pomocą try_to_wake_up(), polityka analizuje jego cechy: wzorce wybudzania, wykorzystanie CPU/IO, cgroup, obecność polityk RT (SCHED_FIFO, SCHED_RR). Polityka umieszcza zadanie w kolejce globalnej lub lokalnej, korzystając z wirtualnego czasu do ustalania priorytetów.
W dispatch() pobierane jest zadanie i przekazywane do jądra za pomocą scx_bpf_dispatch() z kwantem w nanosekundach. Migrację inicjuje scx_bpf_kick_cpu() w celu zrównoważenia obciążenia lub poprawy lokalności pamięci podręcznej.
Kolejki DSQ działają w trybie FIFO lub z priorytetami w zależności od metody wstawiania:
- scx_bpf_dispatch() — semantyka FIFO.
- scx_bpf_dispatch_vtime() — porządkowanie według vtime.
Wewnętrzna ranga (score) polityki nie wpływa na priorytety jądra (nice, prio).
Przykład: scx_horoscope jako demonstracja możliwości
Projekt scx_horoscope wykorzystuje dane astrologiczne do korygowania kwantów, ilustrując wzorzec sched_ext. Co 60 sekund obliczane są pozycje planet, retrogradacja i fazy Księżyca, generując współczynniki.
Klasyfikacja zadań według:
- Polityk RT.
- Wzorców wybudzania.
- Wykorzystania CPU/IO.
- cgroup.
Podstawowy kwant jest korygowany mnożnikami: znaki zodiaku podnoszą/obniżają dla typów zadań, retrogradacja — kara 50%, pełnia Księżyca — bonus dla interaktywnych. Kwant jest ograniczany przez min_slice_ns i max_slice_ns.
To przykład edukacyjny: rzeczywiste obliczenia, stabilna praca, ale bez naukowego uzasadnienia do produkcji.
Praktyczne planery na sched_ext
Ekosystem scx obejmuje polityki zorientowane na produkcję:
- scx_lavd (Latency-Aware Virtual Deadline): wirtualne terminy na podstawie wzorców wybudzania, redukcja 99. percentyla opóźnień o 15–30% w porównaniu do CFS na desktopach.
- scx_rusty: optymalizacja NUMA, minimalizacja migracji, uwzględnienie limitów termicznych dla serwerów.
- scx_flash: predykcje ML z przestrzeni użytkownika przez współdzieloną pamięć.
Czas cyklu rozwoju skrócił się do godzin: kompilacja, załadowanie, metryki, iteracja bez restartu.
Narzędzia do benchmarkingu
Ocena za pomocą:
/sys/kernel/sched_ext/— metryki dispatch, migracji.- bpftrace — śledzenie zdarzeń.
- perf sched — opóźnienia przełączania kontekstu.
- cyclictest — ogonowe opóźnienia.
Uwaga na percentyle, nie średnie: ogony są kluczowe dla responsywności.
Scenariusze zastosowań:
- Serwery gier: gwarantowany kwant dla logiki, izolacja od tła.
- Wbudowane: grupowanie zadań w celu zmniejszenia częstotliwości przełączeń.
- Chmura: gwarancje przepustowości poza cgroup.
- Audio/wideo: rezerwacja rdzeni, minimalizacja jittera.
Ograniczenia i rozwój
Narzut od wywołań dispatch rośnie przy wysokiej częstotliwości przełączeń. Błędy logiczne degradują wydajność bez paniki. API ewoluuje, status eksperymentalny.
Co ważne:
- sched_ext w 6.12 z CONFIG_SCHED_CLASS_EXT.
- Polityki BPF do szybkiego prototypowania.
- Powrót do SCHED_NORMAL przy awariach.
- Uwaga na percentyle w benchmarkach.
- Zastosowania w scenariuszach krytycznych dla opóźnień i NUMA.
— Editorial Team
Brak komentarzy.