Status of Embedded Linux 2024


W zeszłym tygodniu na Embedded Linux Conference odbyła się bardzo ciekawa prezentacja – Status of Embedded Linux 2024, przeprowadzona przez Tima Birda oraz Martę Rybczyńską. Podsumowała ostatnie zmiany w Linuxie, które szczególnie wpływają na branżę embedded.

Można dzięki temu szybko nadrobić newsy z open source 🙂 – poniżej kilka z nich:

  • W październiku 2023 został zmergowany pierwszy driver napisany w Rust

O supporcie dla Rust w kernelu mówi się od dawna, pierwsze commity weszły już w 2021. Do października były tylko ozdobą, teraz robią prawdziwą robotę obsługując phy od ASIXa.

Czy Rust będzie C++, na który zasługujemy?

Link do wiekopomnego commita: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d6beb085e8ff3d9547df8a5a55f15ccc7552c5d0

  • Nowy subsystem eventfs

Dzięki temu debugowanie (a konkretnie tracing) w kernelu będzie znacznie szybszy. W kernelu znajduje się wiele tracepointów, z których każdy wymaga np. osobnych i-nodów. Te struktury istnieją nawet wtedy, gdy nie jest używany tracing, co powoduje marnowanie pamięci. Eventfs przydzieli potrzebne struktury tylko wtedy, gdy będą potrzebne.

Więcej informacji:

https://www.kernel.org/doc/html/v5.0/trace/tracepoint-analysis.html

  • Shadow stacks (btw. dobra nazwa na zespół)

“Cieniste stosy” (to już bardziej tytuł powieści) mają zapewnić dodatkową ochronę przed atakami typu ROP (return oriented programming). Polegają one na nadpisaniu stack pointera i rozpoczęcie wykonywania kodu hakera. Jak działa ta ochrona? W dużym skrócie, return address funkcji jest wrzucany jednocześnie na zwykły call stack i shadow stack a przy użyciu jest porównywany. Jeśli ktoś przy nim majstrował, zostanie to wykryte.

  • Usunięcie SLAB i SLOB allocatora

Uczyłem się o SLAB allocatorze jeszcze na studiach więc zwróciłem uwagę SLAB, SLUB i SLOB to implementacje strategii alokacji pamięci dla obiektów kernelowych. Nie były używane przez wystarczająco dużo ludzi, ostała się tylko najlepsza implementacja – SLUB.

  • perf data-type profiling

Brzmi niewinnie ale to jeden z ciekawszych ficzerów. Dodatkowa opcja pozwala na ocenę ile czasu spędzamy przy dostępie do konkretnego pola w strukturze (i wygenerowanie ładnego wykresu itp.). Ma to duży wpływ na lepsze wykorzystanie cache.

  • Zmiana okresu Long Term Support (LTS) dla kernela

Wcześniej 6 lat, teraz ma zostać zmienione na 2 lata. Tutaj będzie szczególny wpływ na projekty embedded, w nich wersja kernela często ma sporą inercję Alternatywnie można skorzystać z wersji dostarczanych przez CIP albo Ubuntu (wsparcie przez 10 lat).

  • PREEMPT_RT

Zawsze znane jako zestaw patchy wprowadzających real-time w kernelu. PODOBNO już prawie gotowe do zmergowania, zostało kilka większych spraw jak wsparcie dla printk ale merge już widać na horyzoncie.

  • Nowa wersja Yocto Project

Scarthgap przyniesie nową wersję bazową kernela i setki zaktualizowanych paczek. Będzie to też wersja LTS, z supportem do kwietnia 2028

Chcesz dowiedzieć się więcej o kilku najbardziej przydatnych narzędziach w pracy m.in. z Yocto project?

Wejdź tutaj i zgarnij darmowego ebooka: https://linuxdev.pl/8narzedzi/

  • Deadline servers

Kolejna funkcjonalność dla fanów czasu real-time i tutaj sprawa jest dość skomplikowana. Do tej pory w kernelu zaimplementowany był tzw. realtime throttling. Polega to na tym, że taski z największym priorytetem mogą zająć maksymalnie 95% zasobów procesora, pozostałe 5% zawsze będzie zarezerwowane dla tasków o niższym prio. Ma to na celu zapobiec sytuacji gdy jeden task z najwyższym prio zablokuje cały system i jedynym wyjściem będzie reset. Rozwiązanie skuteczne, ale ma wadę – 5% będzie zarezerwowane dla tasków low prio nawet gdy żaden nie będzie czekał.

Radą na to ma być właśnie tzw. deadline server. W momencie gdy zostanie wykryte “normal task starvation”* odpalany jest deadline server. Dla niego najważniejsze nie będzie priority taska a jego deadline – każdy task deklaruje ile czasu CPU będzie potrzebować i kiedy. Deadline scheduler tak rozporządzi harmonogramem, żeby każdy task się zmieścił. Można zadeklarkować, że deadline server potrzebuje 5% zasobów i gdy okres wzmożonej aktywności się zakończy, scheduling wróci do normalnego stanu. 5% zabrane dla tasków z low prio powróci do całego systemu, taski z najwyższym prio będą mogły wtdy użyć nawet 100% CPU jeśli będą tego potrzebować.

* – sytuacja gdy zwykłe taski nie mają kiedy się wykonać

Więcej informacji: https://lwn.net/Articles/934415/

  • Usunięcie supportu dla ext2

Nawet nie miałem pojęcia że ten system plików był jeszcze wspierany Pewnie dalej zarządza jakimś systemem kontroli lotów…

  • Rurki z kernelem

Firma Collabora wrzuciła patche wprowadzające pliki definiujące pipeliny (pol. rurki) CI do głównego drzewa kernela. Na razie wspierane są statyczne lintery i wsparcie nie jest jeszcze zmergowane, ale za jakiś czas CI może być dostępny “od ręki” dla wszystkich używających kernela. To na pewno zmniejszy effort przy robieniu własnego QA w projektach komercyjnych opierających się na kernelu linuksowym.

Więcej informacji: https://lwn.net/Articles/934415/

Nagranie

Cała prezentacja, zgodnie z filozofią open source, jest nagrana i dostępna dla każdego. LINK: https://www.youtube.com/watch?v=oh4iAEZ6VI4 , 8:22 start prowadzących.


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *