9.3. Echtzeitaspekte

Für den Treiberentwickler sind Zeitaspekte wichtig:

  1. In einem Treiber werden für viele Aufgaben Zeiten und ebenso ein »Zeitgefühl« benötigt.

  2. Die eigene Komponente – der Treiber – darf das Zeitverhalten des Systems nicht negativ beeinflussen.

  3. Kenntnisse über den inneren Aufbau des Systems und insbesondere über das Zeitverhalten erweitern die Einsatzmöglichkeiten des Linux-Kernels. Der Griff zu einer echtzeitfähigen Variante, z.B. zu RTAI oder RT-Linux, kann in vielen Fällen unterbleiben, wenn Teile der Echtzeitapplikation im Kernel realisiert werden.

Zeiten und das Zeitgefühl. Wie im Treiber Zeiten erfasst werden können respektive wie der Treiber ein Zeitgefühl bekommt, ist bereits im Kapitel Vom Umgang mit Zeiten angeschnitten worden. Im Wesentlichen sind die folgenden Punkte zu beachten:

Einfluss auf das Zeitverhalten. Das Echtzeitverhalten eines Betriebssystems wird – vereinfacht – durch zwei Werte charakterisiert: der Interrupt- und der Task-Latenzzeit. Die Interrupt-Latenzzeit gibt die Zeit an, die zwischen dem Auslösen des Interrupts und dem Start der zugehörigen ISR maximal (im Worst Case) vergeht. Die Task-Latenzzeit gibt die Zeit an, die zwischen dem Eintreffen eines Ereignisses (z.B. einem Interrupt) und dem Start der zugehörigen Task vergeht.

Auf User-Ebene ist insbesondere die Task-Latenzzeit interessant, während innerhalb des Kernels selbst die Interrupt-Latenzzeit die größere Rolle spielt.

Bei dem Entwurf und bei der Realisierung eines Treibers sind folgende Regeln einzuhalten:

Echtzeit-Applikationen mit einem Standard-Linux. Das Zeitverhalten eines Standard-Linuxsystems reicht für einige Echtzeit-Anwendungen nicht aus. Das gilt sowohl für den Bereich der weichen Echtzeit (zum Beispiel Multimedia-Anwendungen) als auch für harte Realzeit-Systeme (vielfach Steuerungssysteme). In Kernel 2.6 hat sich einiges getan, um das Echtzeitverhalten – sowohl das deterministische Verhalten als auch das Verhalten bezüglich der Rechtzeitigkeit – zu verbessern (Stichwort Preemption im Kernel). Dennoch: Ein schlecht erstellter Treiber kann das ganze Zeitverhalten des Kernels kompromittieren.

Doch es gibt Möglichkeiten, das Zeitverhalten eines Standard-Linux zu verbessern beziehungsweise Mechanismen des Kernels zu nutzen, um das System in Echtzeitanwendungen einsetzen zu können. Damit umgeht man den Einsatz einer Realzeitvariante wie beispielsweise RTAI oder RT-Linux, die sich durch ein deterministischeres Zeitverhalten mit kurzen Zeitkonstanten auszeichnet. Diese Echtzeitvarianten bieten bisher kein ausgereiftes Treiber-Interface. Vielmehr muss der Anwender neue Interfaces erlernen. Solange es möglich ist, sollte man daher bei einem Standard-Linux bleiben, welches dem Entwickler eine bekannte Entwicklungsumgebung und ein stets aktuelles System mit einer erprobten Treiberschnittstelle bietet.

Das können Sie in Angriff nehmen, um das Zeitverhalten des Kernels zu verbessern:

  1. Entfernen bzw. disablen Sie aus dem Kernel alle, das Zeitverhalten störende Komponenten. So müssen Sie beispielsweise das Umschalten zwischen Text- und Grafikkonsole verhindern. Eine sorgfältige Auswahl der im Kernel befindlichen Komponenten verbessert das Zeitverhalten des Kernels immens.

  2. Messen Sie das Zeitverhalten des Kernels aus. Verlässliche Informationen über das Zeitverhalten gibt es kaum. Nicht verwunderlich, da schließlich jede Hardware unterschiedlich ist und nicht nur aufgrund ihrer Leistungsfähigkeit das Realzeitverhalten beeinflusst.

    Um das Zeitverhalten auszumessen, müssen Sie ein geeignetes Messprogramm schreiben und die Messwerte erfassen, wenn das System unter Last steht.

    Das ist zugegebenermaßen keine ganz optimale oder befriedigende Lösung, sondern vielmehr ein pragmatischer Ansatz, um überhaupt an verwertbare Messgrößen zu kommen.

  3. Entwerfen Sie Ihre Realzeit-Applikation so, dass Sie harte Echtzeitfunktionalitäten aus der User-Ebene in die Kernel-Ebene transferieren. Innerhalb der Kernel-Ebene haben Sie sowohl ein deterministischeres Zeitverhalten als auch eine kürzere Reaktionszeit. Außerdem lässt sich dadurch die Kontext-Wechselzeit einsparen.

    Die Echtzeitfunktionalitäten selbst können Sie in Form eines Tasklets, eines Timers oder eines Kernel-Threads realisieren. In besonders zeitkritischen Fällen kann auch die ISR selbst genutzt werden.


Lizenz