Jesień Linuksowa Linux - Real-Time w systemach wbudowanych marcin@bis-linux.com 13 padziernika 2012 Jesień LinuksowaLinux - Real-Time w systemach wbudowanych
O mnie http://bis.org.pl/ GNU/Linux (administracja, programowanie) Embedded Linux szkolenia, konsulting, wsparcie techniczne przemysłowe zastosowania systemu Linux (Real-Time)
Ogólny trend w systemach Embedded Linux (i open-source) jest coraz częściej wykorzystywany w systemach wbudowanych. Sprzęt zdolny do uruchamiania Linuksa jest coraz tańszy (procesory, pamięci). Linux wspiera dużo sprzętu i protkołów. Kod tworzony pod Linuksa jest z reguły re-używalny.... koszt systemu, brak vendor lock-in. Coraz więcej tego typu aplikacji musi działać w czasie rzeczywistym.
System sterowania Przykładowy system oparty na projekcie TNKernel http://www.tnkernel.com/ Projekt Open-Source rozwijany głównie przez jednego człowieka (plus zainteresowane nim firmy). Elegancko zaprojektowany, przejrzysty kod. Przetestowany na wielu wdrożeniach. Problem - Klient zamawia: pobieranie logów przez FTP zdalne sterowanie urządzeniem ładniejsze ikonki Zbyt trudne do zrealizowania (w rozsądnym czasie). Te rzeczy mamy z pudełka w Linuksie! - sprawdźmy, czy się nadaje.
Co oznacza Real-Time? Definicja książkowa : Poprawność wykonania operacji zależy nie tylko od tego, czy wykonała się bez błędów i zwróciła poprawny rezultat, ale także od czasu (górnego ograniczenia) w jakim operacja się zakończyła.
Co oznacza Real-Time? Definicja praktyczna : System RT, to taki, w którym da się udowodnić, że każda wymagana operacja zakończy się w określonym czasie. W idealnym przypadku jest to dowód matematyczny. Niestety przy złożoności współczesnych systemów jest to niewykonalne, a nawet jeżeli, to istnieje ryzyko popełnienia błędu podczas dowodzenia. W praktyce stosuje się zestaw testów. System, który przejdzie takie testy określne w specyfikacji lub powstające podczas jego tworzenia, jest określany jako system czasu rzeczywistego.
Real-Time vs. Real-Fast Linux jest zaprojektowany jako system demokratyczny zasoby są przydzielane według potrzeb na przykład: planista zapobiega zagłodzeniu procesu Zazwyczaj determinizm nie jest brany pod uwagę liczy się maksymalna wydajność (throughput)
Real-Time vs. Real-Fast, cd... Większośc warstw i algorytmów jest złożona.
Praktyczny test
Wzorcowy układ
Wzorcowy układ Wejście jest wzbudzane sygnałem i system reaguje zmieniając stan wyjścia. W tym przypadku są to PIN-y GPIO. Sytuacja niczym się nie różni od wzbudzania wejścia przy pomocy innego (wewnętrznego mechanizmu). To jest timera lub przerwania z urządzenia (kamera).
Realizacja w procedurze obsługi przerwania
Realizacja w procedurze obsługi przerwania
Dodajemy obciążenie $ cat /proc/loadavg 5.02 3.76 2.04 2/47 432 odczyt danych z karty SD: cat /dev/mmcblk0p1 > /dev/null wysyłanie danych ASCII na terminal podłączony przez port szeregowy: cat /dev/zero od -v wysyłanie do badanego systemu dużej ilości pakietów IP (ICMP): ping -f <adres urządzenia> Uwaga!: te testy nie poddają systemu obciążeniom występującym podczas rzeczywistej pracy.
Realizacja w procedurze obsługi przerwania - obciążenie
Podstawowe pojęcia.
Deadline Punkt w czasie, w którym dana akcja ma nastąpić (np. reakcja na zmianę stanu wejścia). Hard Real-Time - operacja zawsze musi zakończyć się w określonym czasie. Wynik operacji zakończonej później - nie nadaje się do wykorzystania (awaria już nastąpiła). Soft Real-Time - okazjonalnie operacja może zakończyć się po ustalonym czasie (błąd nie jest krytyczny dla operacji) - na przykład zgubiona ramka obrazu.
Latency Czas pomiędzy momentem w którym akcja miała wystąpić, a momentem w którym w rzeczywistości wystąpiła. W idealnym przypadku (taki system nie istnieje) - opóźnienia byłyby zerowe. W rzeczywistości komputer potrzebuje pewnego czasu na ustabilizowanie i przetworzenie sygnałów ze sprzętu, oprogramowanie wprowadza własne opóźnienia itp.
Jitter Wariancja opóźnienia (poprzedniej wartości). Czas pomiędzy wystąpieniem przerwania (zgłoszeniem przez sprzęt) a uruchomieniem procedury jego obsługi nie jest stały. Jego zmienność jest równie groźna jak duże opóźnienie (na przykład uniemożliwia wykorzystanie systemu do akwizycji danych).
Predictability Przewidywalność. Oznacza wiedzę na temat tego ile czasu zajmie operacja (na przykład procedura obsługi przerwania). Teoria algorytmów zajmuje się określaniem złożoności obliczeniowej poszczególnych metod. W szczególności aby system był przewidywalny, konieczne jest używanie algorytmów działających w stałym czasie (niezależnym od ilości danych).
Worst Case Ze względu na zmienność rzeczywistych systemów (nie da się zbudować systemu idealnego), głównym polem naszych zainteresowań pozostaje najgorszy możliwy przypadek. System będzie działał w sposób przewidywalny jeżeli będziemy znać jego opóźnienie w najgorszym możliwym przypadku.
W Linuksie: Oddzielamy logikę od mechanizmów
Userspace - obciążenie
Userspace - obciążenie
Jak z Linuksa zrobić system Real-Time? Przy pomocy rozwiązań Open-Source
1 Metody oparte na mikrojądrze: RTLinux - pierwsza implementacja. RTAI - najmniejsze możliwe opóźnienia. Adeos - nanokernel. Xenomai - oparty o Adeos - łatwe portowanie kodu z innych systemów RT. 2 Próba ulepszenia Linuksa: RT PREEMPT
Mikrojądro
I-Pipe (Adeos) Kontroluje przerwania sprzętowe (wszystkie) Kontroluje przerwanai software-owe (syscall) Przydziela je do poszczególnych domen.
$ cat /proc/ipipe/xenomai +----- Handling ([A]ccepted, [G]rabbed, +---- Sticky [W]ired, [D]iscarded) +--- Locked +-- Exclusive +- Virtual [IRQ] 38: W..X. 418: W...V [Domain info] id=0x58454e4f priority=topmost $ cat /proc/ipipe/linux 0: A... 1: A...... priority=100
Xenomai - architektura
Xenomai i RTAI Obydwa projekty mają wiele wspólnego. RTAI - ma dostarczać systemu o jak najmniejszych opóźnieniach. Xenomai - ma zapewniać kompatybilność z API klasycznych RTOS-ów. RTAI - jest projektem akademickim - rozwój przebiega dość chaotycznie (skokowo). Xenomai - ma większą bazę użytkowników.
RTAI - LinuxCNC Praktyczna demonstracja możliwości RTAI. Ubuntu (LiveCD) + RTAI + Aplikacje GUI Język G Wizualizacja Sterowniki Programowalne PLC
LinuxCNC
LinuxCNC
RT PREEMPT
Skąd się biorą opóźnienia?
Od wersji 2.6.0 dostępna jest możliwość włączenia wywłaszczania kodu jądra. Kernel Features ---> Preemption Model (Preemptible Kernel ()) --> ( ) No Forced Preemption (Server) ( ) Voluntary Kernel Preemption (Desktop) (X) Preemptible Kernel (Low-Latency Desktop) To nadal nie jest RT!
RT-Preempt Łaty pozwalające na uruchamianie wątków czasu rzeczywistego, rozwijane są w oddzielnym projekcie: http://www.kernel.org/pub/linux/kernel/projects/rt/ Są one sukcesywnie włączane do jądra. Kernel Features ---> Preemption Mode (Complete Preemption ()) ---> (X) Complete Preemption (Real-Time) -*- Thread Softirqs -*- Thread Hardirqs
Przerwania w wątkach 1 Standardowa obsługa przerwań 2 Obsługa przerwań w wątkach
Obciążenie
Obciążenie
Jądro z łatą RT PREEMPT nie sprawia, że system staje się RT. Trzeba skorzystać z: POSIX RT-API i dopiero aplikacje napisane z jego użyciem będą działały w reżimie czasu rzeczywistego!
Wsparcie dla POSIX RT API w Linuksie Standard IEEE 1003.1b - POSIX.1b. Najważniejsze deterministyczne mechanizmy programowania w systemach czasu rzeczywistego określone w standardzie, to: Planowanie uruchamiania procesów (API planisty, pozwalające zdefiniować na stałe priorytet procesu oraz klasę zaszeregowania). Blokowanie pamięci (w celu uniemożliwienia jej zeswapowana). Kolejki komunikatów. Pamięć współdzielona. Sygnały czasu rzeczywistego. Semafory. Timery (CLOCK MONOTONIC). AIO - nieblokujące operacje odczytu i zapisu danych, oraz kontroli zleceń
Aplikacja sterująca procesem przemysłowym
KONIEC