In vielen Bereichen der Steuerungstechnik wird echtzeitfähiges Verhalten der eingesetzten Rechner erwartet. Für Mikrocontroller, die ohne Betriebssystem (bare metal) arbeiten, ist das in der Regel kaum ein Problem. Will man auf ein Betriebssystem nicht verzichten, dann stehen zahlreiche Echtzeit-Betriebssysteme (RTOS) zur Verfügung.
Für Linux-Devices gibt es verschiedene Möglichkeiten, Echtzeitfähigkeit sicher zu stellen. Im White Paper „LINUX und Echtzeit – Eine Übersicht prinzipieller Lösungsansätze“ werden unterschiedliche Möglichkeiten dazu aufgezeigt. Der PREEMPT_RT Patch des Mainline-Linux-Kernels ist der favorisierte und durch die Linux-Community getragene Ansatz.
Die Schritte zum Aufsetzen eines PREEMPT_RT Kernels für den Raspberry Pi sind auf einer separaten Webseite dokumentiert.
An dieser Stelle werden die Ergebnisse der Latenzzeitmessung mit dem Programm cyclictest für Raspbian Jessie und den Kernel mit PREEMPT_RT Patch verglichen:
Linux raspberrypi 4.4.9+ #884 Fri May 6 17:25:37 BST 2016 armv6l GNU/Linux
$ sudo ./cyclictest -l50000000 -m -n -a0 -t1 -p99 -i400 -h400 –q
# Total: 049929616
# Min Latencies: 00014
# Avg Latencies: 00033
# Max Latencies: 03978
# Histogram Overflows: 70384
Die mittlere Latenzzeit beträgt 33 µs, wobei 70384 der insgesamt 50 Mio Messungen oberhalb von 400 µs liegen und die maximale Latenzzeit sogar 3978 µs beträgt.
Linux raspbberypi 4.1.15-rt15 #1 PREEMPT RT Tue May 17 17:19.15 CEST 2016 armv6l GNU/Linux
$ sudo ./cyclictest -l50000000 -m -n -a0 -t1 -p99 -i400 -h400 –q
# Total: 050000000
# Min Latencies: 00015
# Avg Latencies: 00027
# Max Latencies: 00146
# Histogram Overflows: 00000
Die mittlere Latenzzeit beträgt 27 µs und die maximale Latenzzeit nur 146 µs.
Fazit
Durch den Einsatz des PREEMPT_RT Patchs auf den Kernel werden die Latenzzeiten deutlich reduziert und Determinismus des zeitlichen Verhaltens erreicht.
Für den hier untersuchten Raspberry Pi wurde die maximale Latenzzeit von fast 4 ms auf weniger als 150 µs reduziert.