1 / 21

RTAI-Linux Echtzeiterweiterung für Linux

RTAI-Linux Echtzeiterweiterung für Linux. Niklaus Burren - 17. Oktober 2006. Inhalt. Funktionsprinzip - Architektur - RTHAL (Realtime Hardware Abstraction Layer) - Interrupt-Handling - Scheduler - Intertask-Kommunikation - Prozesskommunikation Beispielprogramm

olaf
Télécharger la présentation

RTAI-Linux Echtzeiterweiterung für Linux

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RTAI-LinuxEchtzeiterweiterung für Linux • Niklaus Burren - 17. 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. 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. 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. 1. Funktionsprinzip-Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation Intertask-Kommunikation • Mailboxenrt_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. • Semaphorenrt_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. 1. Funktionsprinzip-Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation 2. Beispielprogramm 3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation Prozesskommunikation • RTAI-FIFOtf_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 MemorySpeicherbereich, der sich Linux-Prozess und RTAI-Task teilen.Zur Übertragung von grossen Datenmengen von einem RTAI-Task zu einem Linux-Prozess.

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

  12. 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. 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. 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. 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/1000000); } 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 2.6.10, RTAI 3.2 • Prozessor: Intel Pentium M 1.4 GHz • RAM: DRAM 1024 MB • Festplatte: 20 GB

  17. 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: 1680.0 μ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: 11.42 μs Minimale Interrupt-Latenzzeit: 7.17 μ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 ohneRTAI 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

More Related