Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

RTAI-Linux Echtzeiterweiterung für Linux

Ähnliche Präsentationen


Präsentation zum Thema: "RTAI-Linux Echtzeiterweiterung für Linux"—  Präsentation transkript:

1 RTAI-Linux Echtzeiterweiterung für Linux
Niklaus Burren Oktober 2006

2 Inhalt Funktionsprinzip - Architektur - RTHAL (Realtime Hardware Abstraction Layer) - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation Beispielprogramm Interrupt-Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation

3 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Architektur

4 RTHAL (Realtime Hardware Abstraction Layer)
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation RTHAL (Realtime Hardware Abstraction Layer) Fall A Abstraktion ist transpa- rent, Interrupt-Kontrolle liegt beim Linux Kernel. Fall B Dem Linux Kernel wird die Interrupt-Kontrolle entzogen und der Echt- zeiterweiterung zuge- wiesen. RTAI Core Der RTAI-Kern wird durch verschiedene Kernel-Module implementiert. Solange die Module nicht geladen werden, behält der Kernel die Interrupt-Kontrolle (Fall A). Beim Laden der RTAI-Module tritt Fall B in Kraft.

5 RTHAL (Realtime Hardware Abstraction Layer)
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation RTHAL (Realtime Hardware Abstraction Layer) RTHAL besteht im wesentlichen aus einer Struktur von Funktions-pointern. Beim Systemstart zeigen sie auf die Interrupt-Handling-Funktionen des Linux-Kernels. Beim Laden der RTAI-Module werden die Funktionspointer auf RTAI interne Funktionen umgelenkt. Nach dem Entfernen der RTAI-Module zeigen die Pointer der Struktur RTHAL wieder auf die Standard-Kernel-Funktionen.

6 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Interrupt-Handling Interruptspezifische Funktionsaufrufe des Linux-Kernels werden mit Hilfe von RTHAL an RTAI interne Funktionen umgeleitet. RTAI implementiert einen Ersatz für das Funktionspaar sti() und cli(). Diese RTAI-Funktionen greifen nicht mehr auf die Hardware zu, sondern setzen Flags in RTAI internen Datenstrukturen So wird festgehalten, ob Linux über eingehende Interrupts informiert werden möchte (sti) oder nicht (cli).

7 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Interrupt-Handling

8 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Scheduler RTAI unterstützt drei Scheduling-Varianten für Uni- und Multiprozessor- Systeme: Uni-Prozessor-Scheduler (UP) Für Plattformen mit nur einem Prozessor. SMP-Scheduler (SMP) Der SMP-Scheduler (Symetric Multiprocessing) ist für Multiprozessor-Systeme gedacht. Tasks können an eine CPU gebunden werden oder symmetrisch auf einen Cluster von CPUs laufen. Multi-Uni-Porzessor-Scheduler (MUP) Dieser Scheduler sieht ein Multiprozessor-System als eine Ansamm-lung von mehreren Einzelprozessoren. Vorteil: Jeder Prozessor kann seine Timer unabhängig von den anderen programmieren. Je nachdem welchen Scheduler man verwenden möchte, lädt man ein anderens Kernel-Modul.

9 Intertask-Kommunikation
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Intertask-Kommunikation Mailboxen rt_mbx_init() Initialisiert eine Mailbox mit einer definierten Grösse. rt_mbx_delete() Löscht die von einer Mailbox genutzten Ressourcen. rt_mbx_send() Sendet eine Nachricht mit definierter Grösse an die Mailbox. rt_mbx_receive() Empfängt eine Nachricht mit definierter Grösse von einer Mailbox. Semaphoren rt_sem_init() Initialisiert eine Semaphore mit gegebenem Wert. rt_sem_delete() Löscht die gegebene Semaphore. rt_sem_signal() Gibt die Semaphore zurück. rt_sem_wait() Wartet auf eine Semaphore. Mailboxen und Semaphoren werden in den Kernel-Modulen der Scheduler implementiert.

10 Prozesskommunikation
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Prozesskommunikation RTAI-FIFO tf_create() Erzeugt einen FIFO mit gegebner Grösse und Nummer. rtf_destroy() Löscht einen FIFO. rtf_reset() Löscht den Inhalt eines FIFO. rtf_put() Schreibt Daten in den FIFO. rtf_get() Liest Daten aus dem FIFO. rtf_create_handler() Registriert einen Handler (Ausführung beim Eintreffen von Daten) Shared Memory Speicherbereich, der sich Linux-Prozess und RTAI-Task teilen. Zur Übertragung von grossen Datenmengen von einem RTAI-Task zu einem Linux-Prozess.

11 Beispielprogramm printer.c fifotest.c Kernel-Modul Userspace-Programm
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm fifotest.c Kernel-Modul printer.c Userspace-Programm

12 Beispielprogramm: fifotest.c
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm: fifotest.c int xinit_module(void) { RTIME tick_period; // Timer Periode RTIME now; // Timestamp für Task-Start // FIFO erzeugen rtf_create(FIFO_0, // FIFO-Nummer 20000); // FIFO-Grösse // Periodischen Task erzeugen rt_task_init(&rt_task, // Task-Struktur taskFkt, // Task-Handler 1, // Initialisierungswert 2000, // Stackgrösse 0, // Taskpriorität 0, // Task arbeitet ohne FPU 0); // Signal-Handler // Timer und periodischen Task starten tick_period = start_rt_timer(nano2count(TIMERTICKS)); now = rt_get_time(); rt_task_make_periodic(&rt_task, now + tick_period, tick_period); return 0; }

13 Beispielprogramm: fifotest.c
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm: fifotest.c void xcleanup_module(void) { // Timer stoppen stop_rt_timer(); // FIFO löschen rtf_destroy(FIFO_0); // Task löschen rt_task_delete(&rt_task); }

14 Beispielprogramm: fifotest.c
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm: fifotest.c static void taskFkt(int t) { // Message für Übertragung in den Userpace static struct { int taskId; RTIME time; } msg; msg.taskId = t; static long long last_cpu_time; long long cpu_time; while (1) // Systemtimer auslesen cpu_time = rt_get_cpu_time_ns(); // Differenz bilden msg.time = cpu_time - last_cpu_time; last_cpu_time = cpu_time; // Übergabe an FIFO rtf_put(FIFO_0, &msg, sizeof(msg)); // Warten auf nächste Periode rt_task_wait_period(); }

15 Beispielprogramm: printer.c
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm: printer.c static int end; static void endme(int dummy){ end = 1;} int main (int argc, char** argv) { int fifo; static struct { int taskId; long long time; } msg; // FIFO (Datei) öffnen if ((fifo = open("/dev/rtf0", O_RDONLY)) < 0) { fprintf(stderr, "Error opening /dev/rtf0\n"); exit(1); } signal(SIGINT, endme); while(!end) { // Nachricht aus der FIFO auslesen read(fifo, &msg, sizeof(msg)); // Ausgabe auf der Konsole printf("Task%d: %f ms\n", msg.taskId, (float)msg.time/ ); exit(0);

16 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Beispielprogramm Demonstration des Beispielprogramms auf dem Evaluation-Kit SmartModule 855 MSEBX855 von Digital-Logic Software: Ubuntu 5.04, Kernel , RTAI 3.2 Prozessor: Intel Pentium M 1.4 GHz RAM: DRAM 1024 MB Festplatte: 20 GB

17 Messaufbau Pulsbreite entspricht Interrupt-Latenzzeit.
1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Messaufbau Pulsbreite entspricht Interrupt-Latenzzeit. Messung der Pulsbreite mit Oszilloskop. Aufzeichnung der Messdaten in einem Text-File mit Hilfe von Labview.

18 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Messung ohne RTAI SmartModule 855 MSEBX855 (Intel Pentium M 1.4 GHz) Durchschnittliche Interrupt-Latenzzeit (Leerlauf): 8.5 μs Maximale Interrupt-Latenzzeit: μs Minimale Interrupt-Latenzzeit: 4.0 μs

19 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Messung mit RTAI SmartModule 855 MSEBX855 (Intel Pentium M 1.4 GHz) Durchschnittliche Interrupt-Latenzzeit (Leerlauf): 8.5 μs Maximale Interrupt-Latenzzeit: μs Minimale Interrupt-Latenzzeit: μs

20 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Interpretation Die durchschnittliche Interrupt-Latenzzeit im Leerlauf ist mit und ohne RTAI etwa gleich gross (8.5 us). Im Belastungsfall ist die Interrupt-Latenzzeit mit RTAI wesentlich stabiler als ohne RTAI.

21 1. Funktionsprinzip - Architektur - RTHAL - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen - Messaufbau - Messung ohne RTAI - Messung mit RTAI - Interpretation Fragen


Herunterladen ppt "RTAI-Linux Echtzeiterweiterung für Linux"

Ähnliche Präsentationen


Google-Anzeigen