,,Echtzeit ist ein Buzzword und sagt gerade bei Nichtrealtime-Betriebssystemen garnichts aus. (Thomas Ogrisegg in at.linux) Linux PREEMPT RT



Ähnliche Dokumente
Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Seminar: Mobile Geräte QNX Einführung

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Echtzeitscheduling (1)

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Dokumentation IBIS Monitor

Anleitung über den Umgang mit Schildern

AutoCAD Dienstprogramm zur Lizenzübertragung

Eigene Dokumente, Fotos, Bilder etc. sichern

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Jens Peter Lindemann Lehrstuhl Neurobiologie. 13. Januar 2009

Abwesenheitsnotiz im Exchange Server 2010

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Softwarelösungen: Versuch 4

Excel Auswertungen in XAuftrag / XFibu

ecaros2 - Accountmanager

Grundlagen verteilter Systeme

Installation OMNIKEY 3121 USB

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

AutoTexte und AutoKorrektur unter Outlook verwenden

Anleitung zum Öffnen meiner Fotoalben bei web.de

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Synchronisations- Assistent

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Kalender freigeben und andere Kalender aufrufen

Zählen von Objekten einer bestimmten Klasse

Vorgehensweise bei Lastschriftverfahren

Tipps und Tricks zu den Updates

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Round-Robin Scheduling (RR)

CD einlegen (Moment warten) Die Aktion markieren, die durchgeführt werden soll. (in diesem Beispiel»Audio-CD-Wiedergabe)

GEVITAS Farben-Reaktionstest

Vorbereitung zur Prüfung Echtzeitbetriebssysteme

Installationshinweise Linux Edubuntu 7.10 bei Verwendung des PC-Wächter

Informationen zum neuen Studmail häufige Fragen

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

3.14 Die Programmieroberfläche Programmierung

leave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret

Menü auf zwei Module verteilt (Joomla 3.4.0)

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Nutzung von GiS BasePac 8 im Netzwerk

FAQ Spielvorbereitung Startspieler: Wer ist Startspieler?

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Installation von Druckern auf dem ZOVAS-Notebook. 1. Der Drucker ist direkt mit dem Notebook verbunden

Betriebssystembau (BSB)

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

Zwischenablage (Bilder, Texte,...)

Pfötchenhoffung e.v. Tier Manager

Dokumentation für Lehrstühle

How-To-Do. Fernwartung einer VIPA Steuerung via Ethernet

Canon PG-40/50, CL-41/51 Druckköpfe

Mediator 9 - Lernprogramm

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

1. Allgemeines zum tevitel.wq-monitor Seite WQ-Monitor konfigurieren Seite 4

Neuerungen der Ck-Schnittstelle in dms.net Rev. 4895

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Cisco AnyConnect VPN Client - Anleitung für Windows7

Bedienungsanleitung für BackupMotion

Gruppenrichtlinien und Softwareverteilung

Adobe Photoshop CS2, CS3, CS4, CS5 mit Auto-SoftProof-Ansicht

Kurzanleitung für Verkäufer

1. So beginnen Sie eine Kalkulation

Lehrer: Einschreibemethoden

Handbuch. TMBackup R3

104 WebUntis -Dokumentation

Produkte Info Touchscreen-Panel

Ihre Lizenz ändern. Stand 01/2015

GEONET Anleitung für Web-Autoren

DOKUMENTATION VOGELZUCHT 2015 PLUS

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Professionelle Seminare im Bereich MS-Office

Der SD-Kartenslot befindet sich an der rechten Gehäuseseite unterhalb der rechteckigen hellgrauen Gummiabdeckung.

Dokumentenverwaltung im Internet

1 topologisches Sortieren

StudyDeal Accounts auf

Ein Scheduler für alle Fälle Robert Kaiser, SYSGO AG

Handbuch für Redakteure

GITS Steckbriefe Tutorial

Arbeiten mit UMLed und Delphi

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Speicher in der Cloud

Erster Schritt: Antrag um Passwort (s. Rubrik -> techn. Richtlinien/Antrag für Zugangsberechtigung)

OSEK-OS. Oliver Botschkowski. PG AutoLab Seminarwochenende Oktober AutoLab

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Formular»Fragenkatalog BIM-Server«

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Synchronisierung von Transaktionen ohne Sperren. Annahme: Es gibt eine Methode, zu erkennen, wann eine Transaktion die serielle Ordnung verletzt.

Teaser-Bilder erstellen mit GIMP. Bildbearbeitung mit GIMP 1

Web Stundenrapporte. Bedienungsanleitung Mitarbeiter

C++ Tutorial: Timer 1

Tragen Sie bitte im Anmeldefeld die Daten ein, die Sie von uns erhalten haben.

Internationales Altkatholisches Laienforum

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

1. Einführung Erstellung einer Teillieferung Erstellung einer Teilrechnung 6

Transkript:

,,Echtzeit ist ein Buzzword und sagt gerade bei Nichtrealtime-Betriebssystemen garnichts aus. (Thomas Ogrisegg in at.linux) Linux PREEMPT RT Linux Realtime Patchset Florian Westphal 15. November 2007 1024D/F260502D <fw@strlen.de> 1C81 1AD5 EA8F 3047 7555 E8EE 5E2F DA6C F260 502D - Linux -rt -

Themenübersicht Einführung: Was ist Echtzeit Latenz & Reaktionszeit Synchronisation/Locking Kernel Preemption -rt Besonderheiten von RT-Anwendungen - Linux -rt - 1

Echtzeit Echtzeit (besonders) schnell Echtzeit-System muss auf Ereignis innerhalb eines vorgegebenen Zeitrahmens reagieren garantierte (Reaktions-)Zeiten Zuverlässigkeit, deterministisches Verhalten auch unter ungünstig und/oder unwahrscheinlichen Bedingungen Linux ist für Common Case optimiert - Linux -rt - 2

Linux RT Ansätze 1. Linux Kernel als Prozess unter einem Realtime-Betriebssystem Kernel darf arbeiten, wenn keine RT-kritische Aktion ausgeführt wird RT-kritische SW läuft außerhalb des Linux Kernels 2. Linux parallel zu RTOS auf eigener CPU 3. Linux -rt Patches (aka PREEMPT_RT) - Linux -rt - 3

Latenz und Reaktionszeit Latenz: Zeitspanne zwischen Stimulus & Reaktion, z.b. Interrupt-Latenz: Zeit zwischen auftreten und Verarbeitung eines Interrupts Scheduling-Latenz: Zeitspanne zwischen aufwecken d. Prozesses und dem Zeitpunkt an dem der Prozess losläuft Reaktionszeit wird auch durch Dauer von Interrupt-Handlern, Anzahl von Interrupts, etc. Zeit die das Scheduling selbst benötigt (Entscheidung, Kontextwechsel, etc.) beeinflusst. - Linux -rt - 4

Ausflug: Linux & präemptives Multitasking Unix (und Linux) unterstützen Preemptives Multitasking... aber das bezieht sich nur auf Prozesse, nicht auf Kernel-Code Linux 2.4: Nachdem ein Prozess einen Syscall ausführt, ändert sich der laufende Prozess nicht unerwartet. Scheduling kann nur in 3 Fällen stattfinden: 1. Programm wird im Userspace ausgeführt 2. Programm wechselt von Kernel-Mode zurück in Userspace 3. Kernel-Modus führt explizite Anweisung (,,schedule() ) aus (z.b. weil auf Hardware gewartet werden muss) Ausnahme: Interrupts unterbrechen laufenden Code - Linux -rt - 5

Kerneltask-Synchronisation mit Interrupts Code der Form counter++ ist nicht atomar: movl counter, %eax incl %eax movl %eax, counter Beispiel: Senderoutine inkrementiert Sende-Warteschlangenzähler Interrupt Handler dekrementiert diesen. - Linux -rt - 6

Beispiel 1. Senderroutine will inkrementieren: movl counter, %eax (läd Wert in Register, z.b. 1) 2. Interrupt trifft ein, Unterbrechung Wert wird erneut in Register geladen, dekrementiert und gespeichert: jetzt 0 3. Nach Ende des Interrupt Handlers läuft Senderoutine wieder an diese Arbeitet mit dem Wert 1 4. Wer zuletzt schreibt, schreibt am besten : Zähler steht nun auf 2 - Linux -rt - 7

(Historische) Lösung: Interrupts blockieren local_irq_disable(); counter++; local_irq_enable(); Bei SMP-Systemen reicht dies nicht aus: Der Interrupt-Handler kann von einer anderen CPU bearbeitet werden mehrere CPUs könnten die Senderoutine simultan ausführen - Linux -rt - 8

Auf SMP Systemen... CPU 0 movl counter, %eax incl %eax movl %eax, counter CPU1 movl counter, %eax incl %eax movl %eax, counter Eine Addition geht verloren Der Abschnitt darf nur jeweils von einer CPU ausgeführt werden (,,kritischer Abschnitt ) - Linux -rt - 9

Spinlocks Synchronisationsmechanismus: Nur ein Task kann von spin_lock(&lock) gesicherten Abschnitt ausführen nutzt atomare CPU-Instruktion (z.b. xchg, lock prefix) Busy-Wait: Threads warten aktiv auf Lock-Freigabe blockiert CPU spinlocks nur für kurze Abschnitte verwenden Thread, der spinlock hält, darf nicht schlafen, also insb. keine Scheduler-Aufrufe Falls Synchronisation auch mit Interrupt-Kontext erforderlich: spin_lock_irqsave() Einprozessor-System: kein Spinlock notwendig - Linux -rt - 10

Mutexe: Wenns mal länger dauert.. Mutexe sind spinlocks ähnlich. Wichtigste Unterschiede: Task darf (während Mutex gehalten wird) blockieren jeder Mutex verfügt über Warteliste Wenn Mutex belegt: Task an Warteliste anfügt und Scheduler-Aufruf CPU nicht blockiert können nicht in Interruptkontext verwendet werden Zugriff auf Warteliste mit spinlock serialisiert - Linux -rt - 11

Zusammenfassung Ablauf bestimmter Code-Sequenzen muss serialisiert werden geteilte Datenstrukturen Kommunikations mit Hardware/Geräten Interruptsperren, spinlocks, mutexe Echtzeit schnell Echtzeit-System muss auf Ereignis (Timer, externe Eingaben, etc.) innerhalb eines vorgegebenen Zeitrahmens reagieren - Linux -rt - 12

Scheduling-Latenz: Ursachen Treiber mit aufwendigen/langen ISR Kernel-Code, welcher längere Zeitdauer in spinlock-region verbringt Scheduling kann währenddessen nicht durchgeführt werden Für schnelle Reaktionen/Antwortzeiten auf Ereignisse/externe Signale ist Rescheduling nötig (z.b. jetzt wieder lauffähiges Programm ausführen) - Linux -rt - 13

Wie Scheduling-Latenz reduzieren? Scheduling nach auftreten eines Events (z.b. Interrupt) so schnell wie möglich durchführen Linux Kernel Preemption Grundidee: Zeit zwischen Eintreten eines Ereignisses und Scheduler- Aufruf reduzieren Mehr Gelegenheiten für Scheduler-Aufruf schaffen Aber wann ist es sicher, den Kernel-Prozess zu unterbrechen? kurze Antwort: Wenn der Kernel nicht einen kritischen Abschnitt abarbeitet. - Linux -rt - 14

Explizites Scheduling cond_resched*()-funktionen Falls für längere Zeiträume keine Scheduling-Gelegenheit besteht z.b., wenn über größere Datenmengen iteriert werden muss (fs/, mm/... ) System weniger Flüssig Linux 2.4: Lowlatency-Patches Code-Anpassungen nötig ( lock breaking ) - Linux -rt - 15

CONFIG PREEMPT VOLUNTARY Mehr Codestellen an denen Scheduler-Aufrufe erfolgen Verwendet exisitierende Debugging-Funktionalität: might_sleep() might_sleep() markiert Stellen, die zu scheduling-aufrufen führen könnten Mit aktiviertem CONFIG_DEBUG_SPINLOCK_SLEEP werden Stacktraces erzeugt, falls might_sleep() Aufruf innerhalb eines atomaren Kontextes (d.h. hält spinlock oder Interrupts abgeschaltet) erfolgt ist Mit CONFIG_PREEMPT_VOLUNTARY: might_sleep() cond_resched() - Linux -rt - 16

include/linux/kernel.h #ifdef CONFIG_PREEMPT_VOLUNTARY extern int cond_resched(void); # define might_resched() cond_resched() #else # define might_resched() do { } while (0) #endif #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP void might_sleep(char *file, int line); # define might_sleep() \ do{ might_sleep( FILE, LINE ); might_resched();}while(0) #else # define might_sleep() do { might_resched(); } while (0) #endif - Linux -rt - 17

CONFIG PREEMPT aktueller Kernelthread kann verdrängt werden (nicht in spinlocks, Interrupts, etc.) spinlock-aufruf inkrementiert/dekrementiert zusätzlich per-prozess Zähler: preempt_count etwas vereinfacht: nach Abarbeitung einer ISR sowie bei Aufruf von spin_unlock(&x): Wenn preempt_count == 0 und Scheduler-Aufruf nötig (z.b. weil Task t nun lauffähig ist) preempt_schedule() - Linux -rt - 18

Wie Reaktionszeit garantieren? Was für RT kritische Bestandteile untersucht werden müsste: 1. Interrupthandler (incl. Softirqs) 2. Scheduler 3. Alle Stellen,... an denen Interrupts deaktiviert werden an denen Preemption deaktiviert wird (incl. spinlocks) 4. Alle Code-Stellen an denen Mutexe/Semaphoren verwendet werden, die auch von den RT-Bestandteilen benötigt werden - Linux -rt - 19

Priority Inversion-Problem (1) Gegeben: Tasks t 1, t 2, t 3. t 1 : kritisch, RT Priorität t 2 : normale Priorität t 3 : niedrige Priorität t 1 und t 3 teilen sich Mutex/Semaphore - Linux -rt - 20

Priority Inversion (2) 1. t 3 : holt mutex 2. t 1 : wird ablauffähig, verdrängt t 3 3. t 1 : benötigt Mutex blockiert, t 3 erhält CPU 4. diese Priority Inversion ist (noch) kein Problem 5. Wenn aber t 2 lauffähig wird ist t 1 auf unbestimmte Zeit blockiert (unbouneded priority inversion) - Linux -rt - 21

PREEMPT RT Patch: Ziele nicht-unterbrechbare Codeanteile minimieren Anteil der Änderungen (gegenüber normalem Kernel) gering halten Mit PREEMPT_RT werden (von wenigen Ausnahmen abgesehen)... kritische Abschnitte Interrupt-Handler Abschnitte welche Interrupts sperren... unterbrechbar Hochauflösende Timer Integration in Mainline - Linux -rt - 22

Normaler Kernel : drei Kontexte 1. Interrupts (nicht unterbrechbar) 2. Softinterrupts (nicht unterbrechbar) 3. Prozess-Kontext (ausserhalb kritischer Abschnitte unterbrechbar) - Linux -rt - 23

Kontexte mit PREEMPT RT 1.,,Harte Interrupts (nicht unterbrechbar) maskiert nur den jeweiligen Interrupt 2. Interrupt-Threads (unterbrechbar) Je ein Thread per IRQ Ruft alle ISR des jew. IRQ auf 3. Softinterrupts (unterbrechbar) 4. Prozess-Kontext (unterbrechbar) Spinlock RTMutex - Linux -rt - 24

Priority Inheritance Wdh: Priority Inversion 1. t 3 : holt mutex 2. t 1 : wird ablauffähig, verdrängt t 3 3. t 1 : benötigt Mutex blockiert, t 3 erhält CPU Wenn nun t 2 lauffähig wird, so ist t 1 auf unbestimmte Zeit blockiert Priority Inheritance vererbt Priorität von t 1 an t 3 stellt sicher, das Prozess nie von einem (niedriger priorisierten) Prozess blockiert wird - Linux -rt - 25

RT-Mutexes Mutexe mit PI-Protokoll Ürsprünglich -rt, inzwischen in Mainline (für pthread_mutex_t PTHREAD_PRIO_INHERIT) Eigentümer eines RT-Mutexes erhält Priorität von wartenden Tasks mit höherere Priorität Falls der Eigentümer selbst auf einen anderen RT-Mutex blockt, Priorität ggf. neu vererben - Linux -rt - 26

RT-Mutexes (forts.) RT-Mutex-Warteliste: nach Priorität sortiert pi_list: Per-Task Liste mit Top-Waiters aller RTMutexe des Tasks, nach Priorität sortiert Wenn sich erster Task dieser Liste ändert: Priorität d. Eigentümers anpassen - Linux -rt - 27

Reader/Writer Locks (rwlock t) es wird zwischen lesenden und schreibenden Nutzern unterschieden rwlock kann von mehreren lesenden oder einem schreibenden Task verwendet werden Wenn schreibender Zugriff benötigt: Es muss auf alle Leser gewartet werden Problem: Blockiert auf Unbestimmte Zeit 1. Only one task at a time may read-acquire a given reader-writer lock. 2. If #1 results in performance or scalability problems, the problematic lock will be replaced with RCU (read-copy update). - Linux -rt - 28

RCU (read-copy update) Schreiber blockieren keine Leser Leser halten Schreiber nicht davon ab, Daten zu verändern keine Priority Inversion möglich - Linux -rt - 29

RCU (read-copy update) löschoperationen werden zweigeteilt 1. verhindern, dass zu löschende Daten noch sichtbar sind 2. Löschoperation durchführen RCU ermöglicht lockfreie Lesezugriffe auf Daten, z.b. Linked List 1. Element aus der Liste herauslösen 2. Element löschen, nachdem kein Leser mehr eine Referenz auf dieses Element hält - Linux -rt - 30

RCU (forts.) normaler Kernel: Preemption wird während read-zugriff abgeschaltet (rcu_read_lock()) 1. Leser dürfen nicht schlafen; (RCU kritischer Abschnitt); nicht bei PREEMPT_RT 2. Schreiber haben mehr arbeit: alte Daten, auf die noch zugegriffen werden kann müssen vorgehalten werden Quiz: Wie erkennt der RCU-Mechanismus, wann alte Daten freigegeben werden können? - Linux -rt - 31

RCU im -rt Patchset RCU-Leseseite wird preemptiv: current->rcu_read_lock_nesting Neues Problem: Wenn (viele) Leseseiteten zu lange blockieren: OOM Gesucht: was änhnliches wie Priority Inheritance - Linux -rt - 32

RCU Priority Boosting RCU-Booster Task: überwacht (per-cpu) Liste mit Tasks welche RCU- Leseseitig blockiert sind Overhead nur dann, wenn Task blockiert ist; keine rcu_read_lock etc. Änderung an Scheduler prüft current->rcu_read_lock_nesting, wenn > 0: Preemption innerhalb RCU-Readseite Task in Priority-Boost-Liste eintragen Task trägt sich selbst aus Liste aus wenn äußerste (blockierte) Leseseite beendet ist Booster Task kontrolliert Liste periodisch - Linux -rt - 33

Zustände (Quelle: [2]) - Linux -rt - 34

Linux Scheduling Klassen SCHED_OTHER: Prioritäten (-20 (hoch) bis 19 (niedrig)) Die Standard-Klasse. Alle Prozesse erhalten faire CPU-Anteile. Höher Priorisierte Prozesse erhalten längere/häufigere Zeitscheiben, blockieren nierdrigere Prozesse jedoch nicht. SCHED_FIFO: Echtzeitpriorität. Es wird jeweils der höchstpriorisierte Prozess bearbeitet. Solange der Prozess nicht blockiert, wird die CPU nicht abgegeben ( for (;;) ; mit SCHED_FIFO alle anderen Prozesse laufen nicht mehr) SCHED_RR: SCHED_FIFO mit Zeitscheiben ; bei mehreren SCHED_RR Prozessen gleicher Priorität laufen diese abwechselnd Einstellen mit: chrt(1), sched_setscheduler(2) - Linux -rt - 35

RTOS allein reicht nicht aus Hardware-Latenzen: SMI/SMM, DMA,... SM-Interrupts liegen außerhalb der Kontrolle des Betriebssystems nicht vorhersagbare/kontrollierbare Unterbrechungen Pagefault-Latenzen: Verwendung von Dateien Swap mmap, fopen,... - Linux -rt - 36

RTOS allein reicht nicht aus Anwendung muss auch geeignet entworfen werden, z.b. Teilen von Anwendung in RT-kritische und weniger wichtigen Teil Auslagern von (bestimmten) Speicherseiten mit mlock(2)/bzw. mlockall(2) deaktivieren allen Speicher vor betreten des RT-Bereichs anfordern und initialisieren - Linux -rt - 37

FIN mit RT-Patch wird Kernel fast vollständig preemptible Dazu werden z.b. ISR etc. in Kernel-Threads ausgelagert deterministischeres Zeitverhalten auf Kosten der Leistung Highres-Timer, Userspace Priority Inheritance in Mainline - Linux -rt - 38

Literatur 1 Darren Hart, Steve Rostedt, Internals of the RT Patch ; Linux Symposium 2007. 2 Paul McKenney Priority-Boosting RCU Read-Side Critical Sections http://www.rdrop.com/users/paulmck/ \ RCU/RCUbooststate.2007.04.16a.pdf (RCU-Seite: http://www.rdrop.com/users/paulmck/rcu/) 3 RT-Wiki: http://rt.wiki.kernel.org/ 4 RT-Patches: http://www.kernel.org/pub/linux/kernel/projects/rt/ 5 Documentation/rt-mutex-design.txt - Linux -rt - 39