Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
software:linux:cyclictest:start [2016-05-27 09:58] – mgehrig2 | software:linux:cyclictest:start [2019-10-22 14:30] – 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 |
- | < | + | < |
+ | |||
+ | [{{ : | ||
| -n |use clock_nanosleep| | | -n |use clock_nanosleep| | ||
- | | -p80 | + | | -Sp80 |S = alle Kerne; p = Priorität **-**80 (Realtime)| |
| -l600000 | | -l600000 | ||
| -i1000 | | -i1000 | ||
Zeile 48: | Zeile 52: | ||
Um das Histogramm zu plotten kann das Matlab Skript {{: | Um das Histogramm zu plotten kann das Matlab Skript {{: | ||
+ | ==== Optionen ==== | ||
+ | Die vollständige Dokumentation über die Optionen findet sich auf der [[https:// | ||
- | ===== Zu beachten ===== | + | | -n |use clock_nanosleep; |
- | ==== Priorität ==== | + | | -p80 |Priorität| |
- | + | | -l600000 | |
- | Grundsätzlich empfiehlt sich für RT Anwendungen | + | | -i1000 |1000us pro Zyklus| |
- | + | | -h1000 | |
- | Eine Priorität von -80 ist für RT-Prozesse mit hoher Priorität | + | | -q |quiet: keine Ausgaben während Messung. Kann wichtig |
- | + | | -m |Der Cyclictest reserviert sich den benötigten Speicher | |
- | 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 | + | |
- | + | ||
- | 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 '' | + | |
+ | ===== Messungen ===== | ||
- | ===== 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 73: | 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 84: | 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 108: | 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 118: | 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 129: | 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 144: | Zeile 142: | ||
< | < | ||
+ | 13h lange Messung | ||
+ | |||
+ | [{{ : | ||
+ | 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: |