Linux 6.12 może obsługiwać „PREEMPT_RT” w czasie rzeczywistym

Preempt-RT to modyfikacja, która pozwala zadaniom o wyższym priorytecie przerywać zadania o niższym priorytecie.

El koncepcja systemu czasu rzeczywistego Nie jest to coś, o czym myślano w ostatnich latach w Linuksie, od czasu pomysłu na to zaczęło się prawie 20 lat temu, a dokładnie w 2005 roku w ramach projektu „Realtime-Preempt” („-rt”) wraz z rozwojem trybu PREEMPT_RT dla jądra Linuksa.

Dla tych, którzy nie wiedzą PREEMPT_RT, powinni to wiedzieć to łatka dla jądra Linuksai konwertuje system operacyjny na działający w czasie rzeczywistym (w czasie rzeczywistym). Głównym celem PREEMPT_RT jest zmniejszenie opóźnień i zapewnienie przewidywalności w realizacji zadań, co jest kluczowe w aplikacjach wymagających szybkich odpowiedzi.

Mówiąc prościej, możemy powiedzieć, że PREEMPT_RT pozwala na przerwanie prawie wszystkich części jądra, co zmniejsza opóźnienia. W przeciwieństwie do standardowego jądra, nie wszystkie sekcje można przerwać, co może powodować opóźnienia w czasie odpowiedzi.

Od 2015 roku projekt znajduje się pod opieką Linux Foundation i do tej pory implementacja trybu PREEMPT_RT była oferowana w formie zewnętrznych poprawek. W oparciu o te łatki powstają dystrybucje takie jak RHEL, SUSE i Ubuntu stworzyły edycje swoich produktów w czasie rzeczywistym, bardzo poszukiwane w takich sektorach jak systemy finansowe, urządzenia do przetwarzania audio i wideo, systemy lotnicze, medycyna, robotyka, telekomunikacja i zastosowania przemysłowe, gdzie istotne jest zapewnienie przewidywalnego czasu reakcji na zdarzenia.

En W 2019 roku rozpoczął się proces awansu poprawek opracowanych w projekcie PREEMPT_RT do głównego jądra Linuksa. W wersji jądra 5.3 w pliku konfiguracyjnym dodano opcję PREEMPT_RT umożliwiającą włączenie trybu czasu rzeczywistego.

Bity printk wymagane dla PREEMPT_RT znajdują się w Linux-next. Ten była ostatnią znaną przeszkodą dla PREEMPT_RT. Kolejka RT ma także „konsola atomowa” dla UART 8250, której jeszcze nie ma Linux-następny. Oznacza to zachowanie „starszej konsoli”, czyli brak drukowania kontekst atomowy w sytuacjach awaryjnych. Kontroler 8250 UART jest jedyny który zapewnia obecnie obsługę „konsoli atomowej”.

wszystko ta praca wkrótce przyniesie owoce, gdyż pełna integracja niezbędnych zmian trwała pięć lat i dobiega końca, gdyż oczekuje się, że w wersji 6.12 jądro będzie można skompilować w trybie PREEMPT_RT bez konieczności stosowania dodatkowych łatek.

Wspomina się, że ostatnia przeszkoda co uniemożliwiło włączenie PREEMPT_RT, to brak obsługa nieblokującego wyjścia atomowego przy użyciu funkcji printk. Ta funkcjonalność już była przyjęte w gałęzi Linux-next. Dodatkowo na wdrożenie dla kontrolera 8250 UART oczekuje nieblokująca konsola atomowa, której brak obecnie uniemożliwia wysyłanie do konsoli komunikatów alarmowych z kodu wykonywanego w kontekstach atomowych.

Po połączeniu bitów printk można włączyć PREEMPT_RT na X86, ARM64 i Risc-V. Te trzy połączone architektury wymagały zmian na przestrzeni lat.
lat, pozostawiając mnie w sytuacji, w której nie mam żadnych istotnych zmian w
kolejka, która miałaby na nie wpływ. ARM i POWERPC mają jeszcze kilka niezbędnych poprawek…

Programiści jądra Linuksa ogłosili integrację najnowszych niezbędnych zmian w gałęzi linux-next, który zostanie użyty do kompilacji wersji 6.12. Zmiany te pozwolą na kompilację jądra z opcją PREEMPT_RT, która wprowadza możliwości czasu rzeczywistego.

Po zaakceptowaniu tych zmian na głównej gałęzi, tryb PREEMPT_RT Będzie dostępny dla architektur X86, ARM64 i RISC-V. Obsługa architektur ARM i POWERPC zostanie dodana później, ponieważ niezbędne poprawki nie zostały jeszcze w pełni zintegrowane.

Warto wspomnieć, że proponowane zmiany nie są jeszcze ostateczne i możliwe, że jeśli PREEMPT_RT nie pojawi się w gałęzi 6.12, zostanie zintegrowany dopiero w przyszłym roku w wersji 6.13.

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w następujący link.