Task-Management

Echtzeit- und Deadline-Scheduling von Linux

Seite: 3/3

Firmen zum Thema

Der Umgang mit normalen Tasks

Normale Tasks werden in einem Round-Robin-Verfahren gescheduled. Dabei gibt es einen Nice-Wert, der festlegt, wie viel Rechenzeit der Task bei einem Scheduler-Durchlauf bekommt. Ein geringerer Nice-Wert bedeutet, dass der Task weniger nett ist, also mehr Rechenzeit beansprucht. Die Spanne reicht von -20 bis +19. Bei einem Durchlauf kommt jeder Task einmal dran.

Verdrängende Prioritäten können damit nicht eingestellt werden, sondern lediglich ein höherer Anteil an der Rechenzeit. Für latenzzeitkritische Anwendungsfälle eignet sich dieses Verfahren daher nicht.

Bildergalerie
Bildergalerie mit 6 Bildern

Batch-Tasks sind ein Sonderfall von normalen Tasks, die eine sehr kleine Zeitscheibe erhalten. Auch die Idle-Tasks können für eigene Prozesse und Threads eingestellt werden. Sie rechnen dann, wenn nicht mal mehr ein normaler Task rechnen möchte.

Deadline-Tasks lassen sich dort gut einsetzen, wo es darum geht, ab einem Triggerzeitpunkt, ausgelöst etwa durch einen Interrupt, innerhalb eines vorgegebenen Zeitraumes (Deadline) eine Aufgabe auszuführen. Der Scheduler kümmert sich darum, dass der Task entsprechend der Vorgaben rechtzeitig an die Reihe kommt. Dies können sporadische wie auch zyklische Aufgaben sein.

Die Anwendung von Deadline-Tasks

Entscheidend ist in jedem Fall, dass sowohl die Runtime als auch die Periode gewissenhaft unter Worst-Case-Bedinungen bestimmt werden. Sollte einer der beiden Parameter nicht gehalten werden können, kommt es zum GAU: Der eigentlich hochpriorisierte Deadline-Task wird durch den Scheduler abgebrochen. Für die Ermittlung der Zeiten kann die Funktion clock_gettime() im Userspace verwendet werden.

Ferner sollte berücksichtigt werden, dass der zu planende Deadline-Task innerhalb seiner Runtime gegebenenfalls auf weitere Ressourcen warten muss. Dabei wird möglicherweise ein anderer Task aufgeweckt, mittels Prioritätsvererbung beschleunigt an die Reihe genommen, um dann wieder den Deadline-Task rechnen zu lassen.

Hier passiert eine klassische Prioritätsvererbung. Die Bemessung der Deadline-Zeit muss derartige Fälle berücksichtigen. Ein Beispiel für dieses Szenario ist in den beiden Kernelshark-Ausgaben zu sehen (Bild 5 und 6).

Konsequenzen für das Systemdesign

Im aktuellen Linux-Kernel stehen eine ganze Reihe an Scheduling-Verfahren zur Verfügung, die es erlauben, Tasks entsprechend ihrer Anforderung zu schedulen. Damit hat der Designer und Entwickler eine ganze Reihe an Möglichkeiten, sein System zu entwerfen. Zeitkritische Aufgaben können sowohl nach Deadline-Zeiten als auch nach Prioritäten gescheduled werden.

Verweise:

[1] Programm schedtool:

https://github.com/scheduler-tools/schedtool-dl.git

[2] Homepage des Autors: http://www.it-klinger.de

* Andreas Klinger ist selbstständiger Diplom-Ingenieur (FH) und bietet Seminare zu Embedded- und Echtzeit-Linux an. Kontakt: ak@it-klinger.de

Artikelfiles und Artikellinks

(ID:43962634)