W rdzeniu Linux Będzie możliwe użycie eBPF do tworzenia harmonogramów zadań

Linus Torvalds wyraził chęć dołączenia do jądra Linux Wersja 6.11, której wydanie planowane jest na koniec września, zawiera poprawki implementujące mechanizm „sched_ext” (SCX), umożliwiający wykorzystanie eBPF do tworzenia harmonogramów procesora, które obejmują praktycznie wszystkie aspekty harmonogramowania zadań i alokacji zasobów procesora. Harmonogramy te mogą być dynamicznie ładowane i uruchamiane w jądrze. Linux w maszynie wirtualnej eBPF, w której dzięki zastosowaniu kompilacji JIT bajtkod jest tłumaczony na instrukcje maszynowe i wykonywany z wydajnością skompilowanego kodu.

Proponowane poprawki implementują nową klasę planowania SCHED_EXT, dla której priorytet wywołań jądra jest ustawiony pomiędzy klasami SCHED_IDLE i SCHED_NORMAL, co nie pozwala programom obsługi BPF związanym z SCHED_EXT wpływać na zadania już dołączone do zwykłego harmonogramu zadań (SCHED_NORMAL), ale sprawia, że możliwe jest dołączenie do SCHED_EXT poszczególnych zadań lub przeniesienie ich w celu obsługi wszystkich procesów z priorytetem niższym niż realizacja w czasie rzeczywistym. Jeśli do SCHED_EXT nie są dołączone żadne procedury obsługi BPF, wówczas wszystkie procesy przeniesione do klasy SCHED_EXT będą przetwarzane przy użyciu harmonogramu SCHED_NORMAL. Praca handlerów BPF polega na analizowaniu kolejek zadań oczekujących na wykonanie na CPU (jedna kolejka globalna i jedna kolejka na rdzeń procesora) i wybieraniu zadania, do którego mają zostać przydzielone zasoby procesora po zwolnieniu kolejnego rdzenia procesora.

Mechanizm sched_ext ułatwia tworzenie harmonogramów specyficznych dla zadań, pozwala eksperymentować z różnymi technikami i strategiami planowania, a także pozwala szybko tworzyć działające prototypy i na bieżąco zastępować harmonogramy w infrastrukturze produkcyjnej. Na przykład za pomocą sched_ext można utworzyć harmonogram, który uwzględnia specyfikę konkretnej aplikacji i dynamicznie zmienia strategię planowania jej wykonania w zależności od stanu systemu i kilku dodatkowych czynników.

Obecnie opracowywanych jest już kilkanaście harmonogramów opartych na sched_ext, których logika planowania zadań jest definiowana w przestrzeni użytkownika i ładowana do jądra w postaci programów BPF:

  • scx_layered to hybrydowy harmonogram zadań, który dzieli zadania na warstwy, z których każda ma własną strategię planowania. Na przykład scx_layered pozwala na przydzielenie określonych zadań do osobnej warstwy, dla której zostaną zapewnione określone gwarantowane zasoby procesora, lub na zwiększenie priorytetu poszczególnych aplikacji. Harmonogram został opracowany przez firmę Meta. Logika generowania BPF w przestrzeni użytkownika jest napisana w języku Rust.
  • scx_rustland — harmonogram jest zoptymalizowany w celu zwiększenia priorytetu zadań interaktywnych w stosunku do zadań intensywnie obciążających procesor. Na przykład w teście uruchamiania aplikacji gry Terraria jednocześnie z kompilacją jądra, harmonogram scx_rustland pozwolił nam osiągnąć wyższą liczbę klatek na sekundę w grze niż przy użyciu standardowego harmonogramu EEVDF. Projekt rozwijany jest przez pracownika Canonical. Logika generowania BPF w przestrzeni użytkownika jest napisana w języku Rust.
  • scx_lavd - implementacja algorytmu planowania zadań LAVD (Latency-criticality Aware Virtual Deadline), który uwzględnia istotność redukcji opóźnień dla konkretnych zadań i wykorzystuje informacje o postępie procesów przy podejmowaniu decyzji o alokacji zasobów procesora. Harmonogram jest rozwijany przez Igalia i Valve w celu zmniejszenia opóźnień w grach komputerowych i zadaniach interaktywnych. Logika generowania BPF w przestrzeni użytkownika jest napisana w języku Rust.
  • scx_rusty, scx_rlfifo, scx_mitosis - przykłady planistów z komponentami przestrzeni użytkownika w języku Rust, implementujących równoważenie pomiędzy grupami zadań w zależności od obciążenia, prosty harmonogram FIFO i harmonogram do łączenia grup zadań z rdzeniami procesora.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland to przykłady programów planujących z komponentami przestrzeni użytkownika w C, ilustrującymi różne możliwości sched-ext.

Mechanizm sched_ext został pierwotnie zaproponowany do recenzji przez deweloperów jądra w 2022 roku, po czym opublikowano sześć poprawek. Pomimo braku wsparcia w głównym jądrze, jest on dostępny dla dystrybucji. Ubuntu, Łuk LinuxFedora, NixOS i inne systemy operacyjne oferują teraz możliwość instalacji sched_ext za pośrednictwem dodatkowych pakietów. Canonical rozważa dodanie komponentów sched-ext do pakietu. Ubuntu Od 24.10 października Valve pracuje nad integracją sched_ext ze Steam Deck. Meta korzysta już z harmonogramu opartego na sched_ext w swojej infrastrukturze produkcyjnej.

Google eksperymentuje z własnym frameworkiem ghOSt, który pozwala wpływać na decyzje harmonogramu zadań za pomocą programów BPF. Rozpoczęto prace nad przeniesieniem ghOSt do sched_ext. Google opracowuje również port sched_ext dla ChromeOS z zamiarem wykorzystania go do hybrydowego harmonogramu scx_layered w celu zmniejszenia opóźnień bez użycia rozszerzeń czasu rzeczywistego. Oculus opracowuje port sched_ext dla Android.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster