Elektro- und Kommunikationstechnik, Burgdorf1 Berner Fachhochschule Technik und Informatik...
-
Upload
hagan-wetzel -
Category
Documents
-
view
116 -
download
0
Transcript of Elektro- und Kommunikationstechnik, Burgdorf1 Berner Fachhochschule Technik und Informatik...
Elektro- und Kommunikationstechnik, Burgdorf1
Berner Fachhochschule
Technik und Informatik
RTAI-LinuxEchtzeiterweiterung für Linux
Niklaus Burren - 17. Oktober 2006
Elektro- und Kommunikationstechnik, Burgdorf2
Berner Fachhochschule
Technik und Informatik
Inhalt
1. Funktionsprinzip- Architektur- RTHAL (Realtime Hardware Abstraction Layer)- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Interrupt-Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Elektro- und Kommunikationstechnik, Burgdorf3
Berner Fachhochschule
Technik und Informatik
Architektur1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Elektro- und Kommunikationstechnik, Burgdorf4
Berner Fachhochschule
Technik und Informatik
RTHAL (Realtime Hardware Abstraction Layer)
Fall AAbstraktion ist transpa-rent, Interrupt-Kontrolle liegt beim Linux Kernel.
Fall BDem Linux Kernel wirddie Interrupt-Kontrolleentzogen 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.
1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Elektro- und Kommunikationstechnik, Burgdorf5
Berner Fachhochschule
Technik und Informatik
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 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.
Elektro- und Kommunikationstechnik, Burgdorf6
Berner Fachhochschule
Technik und Informatik
Interrupt-Handling1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
• 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).
Elektro- und Kommunikationstechnik, Burgdorf7
Berner Fachhochschule
Technik und Informatik
Interrupt-Handling1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Elektro- und Kommunikationstechnik, Burgdorf8
Berner Fachhochschule
Technik und Informatik
Scheduler1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
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.
Elektro- und Kommunikationstechnik, Burgdorf9
Berner Fachhochschule
Technik und Informatik
Intertask-Kommunikation1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
• 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.
Elektro- und Kommunikationstechnik, Burgdorf10
Berner Fachhochschule
Technik und Informatik
• 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.
Prozesskommunikation1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Elektro- und Kommunikationstechnik, Burgdorf11
Berner Fachhochschule
Technik und Informatik
Beispielprogramm1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
fifotest.cKernel-Modul
printer.c
Userspace-Programm
Elektro- und Kommunikationstechnik, Burgdorf12
Berner Fachhochschule
Technik und Informatik
Beispielprogramm: fifotest.c1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
int xinit_module(void){RTIME tick_period; // Timer PeriodeRTIME now; // Timestamp für Task-Start
// FIFO erzeugenrtf_create(FIFO_0, // FIFO-Nummer
20000); // FIFO-Grösse
// Periodischen Task erzeugenrt_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 startentick_period = start_rt_timer(nano2count(TIMERTICKS));now = rt_get_time();rt_task_make_periodic(&rt_task, now + tick_period, tick_period);
return 0;}
Elektro- und Kommunikationstechnik, Burgdorf13
Berner Fachhochschule
Technik und Informatik
Beispielprogramm: fifotest.c1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
void xcleanup_module(void){ // Timer stoppen stop_rt_timer();
// FIFO löschen rtf_destroy(FIFO_0);
// Task löschen rt_task_delete(&rt_task);}
Elektro- und Kommunikationstechnik, Burgdorf14
Berner Fachhochschule
Technik und Informatik
Beispielprogramm: fifotest.c1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
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(); }}
Elektro- und Kommunikationstechnik, Burgdorf15
Berner Fachhochschule
Technik und Informatik
Beispielprogramm: printer.c1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
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);}
Elektro- und Kommunikationstechnik, Burgdorf16
Berner Fachhochschule
Technik und Informatik
Beispielprogramm1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
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
Elektro- und Kommunikationstechnik, Burgdorf17
Berner Fachhochschule
Technik und Informatik
Messaufbau1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
• Pulsbreite entspricht Interrupt-Latenzzeit.
• Messung der Pulsbreite mit Oszilloskop.
• Aufzeichnung der Messdaten in einem Text-File mit Hilfe von Labview.
Elektro- und Kommunikationstechnik, Burgdorf18
Berner Fachhochschule
Technik und Informatik
Messung ohne RTAI1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Durchschnittliche Interrupt-Latenzzeit (Leerlauf): 8.5 μsMaximale Interrupt-Latenzzeit: 1680.0 μsMinimale Interrupt-Latenzzeit: 4.0 μs
SmartModule 855 MSEBX855 (Intel Pentium M 1.4 GHz)
Elektro- und Kommunikationstechnik, Burgdorf19
Berner Fachhochschule
Technik und Informatik
Messung mit RTAI1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation
Durchschnittliche Interrupt-Latenzzeit (Leerlauf): 8.5 μsMaximale Interrupt-Latenzzeit: 11.42 μsMinimale Interrupt-Latenzzeit: 7.17 μs
SmartModule 855 MSEBX855 (Intel Pentium M 1.4 GHz)
Elektro- und Kommunikationstechnik, Burgdorf20
Berner Fachhochschule
Technik und Informatik
Interpretation1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- 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.
Elektro- und Kommunikationstechnik, Burgdorf21
Berner Fachhochschule
Technik und Informatik
Fragen1. Funktionsprinzip- Architektur- RTHAL- Interrupt-Handling- Scheduler- Intertask-Kommunikation- Prozesskommunikation
2. Beispielprogramm
3. Latenzzeitmessungen- Messaufbau- Messung ohne RTAI- Messung mit RTAI- Interpretation