Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:linux:cyclictest:start [2016-05-27 11:32] – mgehrig2 | software:linux:cyclictest:start [2019-10-22 14:33] (aktuell) – graf | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
// | // | ||
- | * [[https://rt.wiki.kernel.org/index.php/Cyclictest | + | * [[https:// |
- | Ein Vortrag von der "// | + | Ein Vortrag von der "// |
===== Installation ===== | ===== Installation ===== | ||
- | Siehe [[https://rt.wiki.kernel.org/index.php/Cyclictest#Installation | + | Siehe [[https:// |
- | Bei der Copmpile-Fehlermeldung " | + | Bei der Compile-Fehlermeldung " |
==== Crosscompilieren für MPC 5200 ==== | ==== Crosscompilieren für MPC 5200 ==== | ||
- | - " | + | - " |
- | - Ins Verzeichnis | + | - Ins Verzeichnis |
- | - Im Makefile die 2. Zeile" | + | - Im Makefile die 2. Zeile " |
- Im File " | - Im File " | ||
- Im File " | - Im File " | ||
Zeile 28: | Zeile 28: | ||
===== Anwendung ===== | ===== Anwendung ===== | ||
+ | IMPORTANT | ||
+ | Bei der Messung der RT-Performance müssen diverse Einflüsse beachtet werden. Im Artikel [[software: | ||
==== Schnelle Messung ==== | ==== Schnelle Messung ==== | ||
< | < | ||
- | Erzeugt 5 Threads mit höchster Priorität von **-**80 (-p) mit der Verwendung von nano_sleep() (-n). Genauere Informationen siehe [[https://rt.wiki.kernel.org/index.php/Cyclictest# | + | Erzeugt 5 Threads mit höchster Priorität von **-**80 (-p) mit der Verwendung von nano_sleep() (-n). Genauere Informationen siehe [[https:// |
==== Histogramm ==== | ==== Histogramm ==== | ||
- | Das Histogramm zeigt auf, welche Latenzen wie oft auftreten. Mit folgendem Befehl speichert der Cycletest die Daten in Form von einem Histogram | + | Das Histogramm zeigt auf, welche Latenzen wie oft auftreten. Mit folgendem Befehl speichert der Cycletest die Daten in Form von einem Histogramm |
< | < | ||
Zeile 51: | Zeile 53: | ||
==== Optionen ==== | ==== Optionen ==== | ||
- | Die vollständige Dokumentation über die Optionen findet sich auf der [[https://rt.wiki.kernel.org/index.php/Cyclictest# | + | Die vollständige Dokumentation über die Optionen findet sich auf der [[https:// |
| -n |use clock_nanosleep; | | -n |use clock_nanosleep; | ||
Zeile 61: | Zeile 63: | ||
| -m |Der Cyclictest reserviert sich den benötigten Speicher zu beginn. Der Speicher muss nicht dynamisch zugewiesen werden.| | | -m |Der Cyclictest reserviert sich den benötigten Speicher zu beginn. Der Speicher muss nicht dynamisch zugewiesen werden.| | ||
+ | ===== Messungen ===== | ||
- | ===== Zu beachten ===== | ||
- | ==== Priorität ==== | ||
- | 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). | ||
- | |||
- | Um sich die Priorität von Prozessen anzeigen zu lassen eignet sicht //htop// am besten. //htop// lässt sich mit dem Befehl '' | ||
- | |||
- | 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, | ||
- | < | ||
- | Oder um auch noch den Namen und den " | ||
- | < | ||
- | |||
- | 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. | ||
- | |||
- | ==== 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 '' | ||
- | |||
- | |||
- | ===== Zu erwartende Ergebnisse ===== | ||
==== MPC 5200 ==== | ==== MPC 5200 ==== | ||
Für einen zyklischen Task mit einem Intervall von 1000us und der Priorität -80 ist ein Jitter von maximal 100-150us zu erwarten. Diese Ergebnisse können schlechter ausfallen, wenn zusätzliche Prozesse mit hoher Priorität (z.B. Interrupt Prozesse) laufen. | Für einen zyklischen Task mit einem Intervall von 1000us und der Priorität -80 ist ein Jitter von maximal 100-150us zu erwarten. Diese Ergebnisse können schlechter ausfallen, wenn zusätzliche Prozesse mit hoher Priorität (z.B. Interrupt Prozesse) laufen. | ||
Zeile 94: | Zeile 73: | ||
and ARM boards for embedded systems]] sogar noch bessere Ergebnisse auf. Laut diesem Paper ist der maximale Jitter gerade mal 45us. Allerdings wird nicht genau beschrieben, | and ARM boards for embedded systems]] sogar noch bessere Ergebnisse auf. Laut diesem Paper ist der maximale Jitter gerade mal 45us. Allerdings wird nicht genau beschrieben, | ||
- | === Messungen | + | Die folgenden |
== Nur Cyclictest, ohne zusätzliche Last == | == Nur Cyclictest, ohne zusätzliche Last == | ||
< | < | ||
Zeile 105: | Zeile 84: | ||
* T: 4 ( 3268) P:80 I:3000 C:18904904 Min: 24 Act: 54 Avg: 50 Max: 124 | * T: 4 ( 3268) P:80 I:3000 C:18904904 Min: 24 Act: 54 Avg: 50 Max: 124 | ||
- | == Mit //Cache Calibrator// als zusätzliche | + | == Mit Cache Calibrator als zusätzlicher |
< | < | ||
3 min lange Messung | 3 min lange Messung | ||
Zeile 129: | Zeile 108: | ||
Dank der hohen Priorität des Cyclictest von -80 wird er vom dd-Prozess, der eine Priorität von +20 hat, nicht beeinflusst. | Dank der hohen Priorität des Cyclictest von -80 wird er vom dd-Prozess, der eine Priorität von +20 hat, nicht beeinflusst. | ||
- | |||
==== x86 ==== | ==== x86 ==== | ||
Für folgende Tests wurde ein Laptop mit folgenden Kenndaten verwendet: | Für folgende Tests wurde ein Laptop mit folgenden Kenndaten verwendet: | ||
- | * 4x Intel Core i7-4600 CPU @ 2.1GHz | + | * 4x Intel Core i7-4600U CPU @ 2.1GHz |
* 16GB RAM | * 16GB RAM | ||
* Linux Mint 17.3 Rosa | * Linux Mint 17.3 Rosa | ||
Zeile 139: | Zeile 117: | ||
Linux Mint 17.3 Rosa wird mit einem 3.19 Kernel ausgeliefert. Für den 3.19 Kernel existiert aber kein RT-Patch. Für die RT-Tests wurde deshalb ein 3.18 Kernel verwendet. Mit dem 3.18 Kernel funktionierte das System aber nicht mehr einwandfrei. Es konnte zum Beispiel keine Netzwerkverbindung mehr aufgebaut werden. | Linux Mint 17.3 Rosa wird mit einem 3.19 Kernel ausgeliefert. Für den 3.19 Kernel existiert aber kein RT-Patch. Für die RT-Tests wurde deshalb ein 3.18 Kernel verwendet. Mit dem 3.18 Kernel funktionierte das System aber nicht mehr einwandfrei. Es konnte zum Beispiel keine Netzwerkverbindung mehr aufgebaut werden. | ||
- | === Messungen === | ||
== 3.19.0-32-generic; | == 3.19.0-32-generic; | ||
< | < | ||
Zeile 150: | Zeile 127: | ||
* T: 4 (16293) P:80 I:3000 C: 383109 Min: 1 Act: 2 Avg: 1 Max: 1320 | * T: 4 (16293) P:80 I:3000 C: 383109 Min: 1 Act: 2 Avg: 1 Max: 1320 | ||
- | Die Messung zeigt deutlich, | + | Die Messung zeigt deutlich, |
== 3.19.0-32-generic; | == 3.19.0-32-generic; | ||
Zeile 169: | Zeile 146: | ||
[{{ : | [{{ : | ||
- | Das Histogramm zeigt, dass die meisten Latenzen kleiner als 250us sind. Allerdings hat es auch einige Ausreisser | + | Das Histogramm zeigt, dass die meisten Latenzen kleiner als 250us sind. Allerdings hat es auch einige Ausreisser |
- | ===== Künstliche Last ===== | + | ===== Diskussion |
- | [[software: | + | Neben den ausgeführten Messungen können auch die Messungen von [[https:// |
+ | Unsere Messungen der x86 Plattform scheinen nicht auf eine brauchbare RT-Performance schliessen zu lassen. Besonders die sporadisch auftretenden Ausreisser stören. Die Messungen von OSADL zeigen aber, dass auch i7-Prozessoren eine gute RT-Performance haben können. Der {{:software: |