Hinweise zum Messen eines RT-Systems

Priorität

Allgemeines

Normale Prozesse haben eine Priorität zwischen 0 und 39. Wobei 0 die höchste Priorität ist. RT-Prozesse haben immer eine negative Priorität. Dabei ist -99 die höchste Priorität. Bei RT wird oft von einer positiven Priorität (z.B. +80) gesprochen. Dabei ist aber eigentlich die Priorität -80 gemeint. Eine höhere Priorität als 80 (oder korrekt -80) ist 81 (oder korrekt -81).

Einfluss

Die gemessene Latenz ist abhängig von Tasks und Interrupts die während der Messung auftauchen. Besonders Interrupts und Tasks mit einer höheren Priorität als die RT-Applikation haben einen grossen Einfluss. Aus diesem Grund sollte die Latenz unter realen Bedingungen (möglichst inklusive RT-Applikation und externen Interrupts) gemessen werden. Wenn dies nicht möglich ist, kann das System künstlich belastet werden. Siehe Künstliche Belastungen für ein RT-System.

Wahl der RT Priorität

Grundsätzlich empfiehlt sich für RT Anwendungen eine hohe Priorität. Wenn die maximale Latenz für eine Anwendung gemessen werden soll, dann sollte die Priorität um eins höher gewählt werden, als die Priorität der zu testenden Anwendung oder Prozess.

Eine Priorität von -80 ist für RT-Prozesse mit hoher Priorität gut geeignet.

Wenn eine Priorität von -49 oder kleiner gewählt wird, wird der Cyclictest von Kerneltasks und Interrupthandler unterbrochen. Dies kann gewollt sein, wenn die RT-Anwendung diese Tasks und Interrupthandler nicht unterbrechen darf.

Priorität eines Prozess ermitteln

Um sich die Priorität von Prozessen anzeigen zu lassen eignet sicht htop am besten. htop lässt sich mit dem Befehl sudo apt-get install htop installieren.

Wenn htop nicht installiert werden kann, kann die Priorität auch über das Terminal ausgegeben werden. Dafür muss erst mit Hilfe von top die PID des Hauptprozesses ermittelt werden. Die RT-Prozesse, die vom Hauptprozess aus gestartet werden, haben aufeinander folgende PIDs. Mit folgendem Befehl kann dann die Priorität eines Prozesses angezeigt werden (hier vom Prozess mit der PID = 711):

awk '{print $18}' /proc/711/stat

Oder um auch noch den Namen und den „Nice“-Wert auszugeben :

awk '{print "Name: " $2, " Prio: " $18, " Nice: " $19}' /proc/<PID>/stat

SSH

Eine SSH Verbindung kann notwendig sein, um eine Messung auf einem Target überhaupt starten zu können. Allerdings kann eine solche Verbindung auch einen Einfluss auf die Latenz haben. Insbesondere wenn die Priorität kleiner als 50 gewählt wurde kann das Öffnen einer neuen SSH Verbindung die maximale Latenz erhöhen.

Wenn der Test läuft, werden die aktuellsten Daten mit einer hohen Aktualisierungsrate zum Client geschickt. Um dies zu verhindern kann der Cyclictest mit der Option -q für quiet gestartet werden. Dann werden die Messdaten erst übermittelt, wenn die Messung abgeschlossen ist, oder abgebrochen wird.

Zufall

Ein weiterer Faktor ist der Zufall. Einige Interrupts treten nur sehr unregelmässig auf. Andere treten möglicherweise immer genau zwischen periodischen Messungen auf. Um solche Interrupts doch messen zu können, sollte möglichst lange gemessen werden. Mehrere Stunden sind empfehlenswert. Mehrere Tage lange Messungen erhöhen die Chance, Ausreisser zu erwischen.