Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:linux:cyclictest:start [2016-05-26 18:07] – 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 |
+ | < | ||
+ | |||
+ | [{{ : | ||
| -n |use clock_nanosleep| | | -n |use clock_nanosleep| | ||
- | | -p80 | + | | -Sp80 |S = alle Kerne; p = Priorität |
| -l600000 | | -l600000 | ||
| -i1000 | | -i1000 | ||
Zeile 47: | 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| |
- | Grundsätzlich empfiehlt | + | | -l600000 |
- | + | | -i1000 | |
- | Eine Priorität von 80 ist für RT-Prozesse mit hoher Priorität gut geeignet. | + | | -h1000 |
+ | | -q |quiet: keine Ausgaben während Messung. Kann wichtig sein, wenn die SSH Verbindung die Messung stört| | ||
+ | | -m |Der Cyclictest reserviert sich den benötigten Speicher zu beginn. Der Speicher muss nicht dynamisch zugewiesen werden.| | ||
- | 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. | + | ===== Messungen ===== |
- | ==== 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 |
< | < | ||
In einem [[https:// | In einem [[https:// | ||
Zeile 71: | 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, | ||
- | ===== Künstliche | + | Die folgenden Messungen werden teilweise mit künstlicher Last wie // |
- | [[software: | + | == Nur Cyclictest, ohne zusätzliche Last == |
+ | < | ||
+ | 15h 45min lange Messung | ||
+ | |||
+ | * T: 0 ( 3264) P:80 I:1000 C:56714706 Min: 21 Act: 63 Avg: 49 Max: 106 | ||
+ | * T: 1 ( 3265) P:80 I:1500 C:37809807 Min: 22 Act: 52 Avg: 49 Max: 116 | ||
+ | * T: 2 ( 3266) P:80 I:2000 C:28357356 Min: 22 Act: 61 Avg: 51 Max: 108 | ||
+ | * T: 3 ( 3267) P:80 I:2500 C:22685885 Min: 22 Act: 69 Avg: 47 Max: 103 | ||
+ | * T: 4 ( 3268) P:80 I:3000 C:18904904 Min: 24 Act: 54 Avg: 50 Max: 124 | ||
+ | |||
+ | == Mit Cache Calibrator als zusätzlicher | ||
+ | < | ||
+ | 3 min lange Messung | ||
+ | |||
+ | * T: 0 ( 3135) P:80 I:1000 C: 179806 Min: 21 Act: 58 Avg: 52 Max: 103 | ||
+ | * T: 1 ( 3136) P:80 I:1500 C: 119873 Min: 27 Act: 60 Avg: 54 Max: 136 | ||
+ | * T: 2 ( 3137) P:80 I:2000 C: 89905 Min: 20 Act: 60 Avg: 53 Max: 102 | ||
+ | * T: 3 ( 3138) P:80 I:2500 C: 71924 Min: 29 Act: 60 Avg: 52 Max: 126 | ||
+ | * T: 4 ( 3139) P:80 I:3000 C: 59937 Min: 37 Act: 52 Avg: 46 Max: 99 | ||
+ | |||
+ | Der //Cache Calibrator// | ||
+ | |||
+ | == 100% Prozessorlast mit '' | ||
+ | < | ||
+ | < | ||
+ | 27 min lange Messung | ||
+ | |||
+ | T: 0 ( 695) P:80 I:1000 C:1643188 Min: 23 Act: 65 Avg: 49 Max: 120 | ||
+ | T: 1 ( 696) P:80 I:1500 C:1095459 Min: 24 Act: 61 Avg: 51 Max: 119 | ||
+ | T: 2 ( 697) P:80 I:2000 C: 821594 Min: 33 Act: 47 Avg: 43 Max: 89 | ||
+ | T: 3 ( 698) P:80 I:2500 C: 657275 Min: 28 Act: 41 Avg: 51 Max: 99 | ||
+ | T: 4 ( 699) P:80 I:3000 C: 547729 Min: 28 Act: 44 Avg: 51 Max: 114 | ||
+ | |||
+ | Dank der hohen Priorität des Cyclictest von -80 wird er vom dd-Prozess, der eine Priorität von +20 hat, nicht beeinflusst. | ||
+ | |||
+ | ==== x86 ==== | ||
+ | Für folgende Tests wurde ein Laptop mit folgenden Kenndaten verwendet: | ||
+ | * 4x Intel Core i7-4600U CPU @ 2.1GHz | ||
+ | * 16GB RAM | ||
+ | * Linux Mint 17.3 Rosa | ||
+ | |||
+ | 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. | ||
+ | |||
+ | == 3.19.0-32-generic; | ||
+ | < | ||
+ | 19 min lange Messung | ||
+ | |||
+ | * T: 0 (16289) P:80 I:1000 C:1149325 Min: 1 Act: 2 Avg: 1 Max: 1505 | ||
+ | * T: 1 (16290) P:80 I:1500 C: 766219 Min: 1 Act: 2 Avg: 1 Max: 1390 | ||
+ | * T: 2 (16291) P:80 I:2000 C: 574664 Min: 1 Act: 2 Avg: 2 Max: 1039 | ||
+ | * T: 3 (16292) P:80 I:2500 C: 459731 Min: 1 Act: 1 Avg: 2 Max: 741 | ||
+ | * T: 4 (16293) P:80 I:3000 C: 383109 Min: 1 Act: 2 Avg: 1 Max: 1320 | ||
+ | |||
+ | Die Messung zeigt deutlich, dass ein nicht RT gepatchter Kernel nicht für RT-Anwendungen zu gebrauchen ist. | ||
+ | |||
+ | == 3.19.0-32-generic; | ||
+ | < | ||
+ | 83 min lange Messung | ||
+ | |||
+ | * T: 0 (17458) P:80 I:1000 C:4999230 Min: 1 Act: 2 Avg: 2 Max: 5269 | ||
+ | * T: 1 (17459) P:80 I:1500 C:3332832 Min: 1 Act: 2 Avg: 2 Max: | ||
+ | * T: 2 (17460) P:80 I:2000 C:2499634 Min: 1 Act: 1 Avg: 2 Max: 2435 | ||
+ | * T: 3 (17461) P:80 I:2500 C:1999709 Min: 1 Act: 1 Avg: 2 Max: 1933 | ||
+ | * T: 4 (17462) P:80 I:3000 C:1666423 Min: 1 Act: 2 Avg: 2 Max: 4224 | ||
+ | |||
+ | == 3.18.29-rt30; | ||
+ | |||
+ | < | ||
+ | 13h lange Messung | ||
+ | |||
+ | [{{ : | ||
+ | |||
+ | Das Histogramm zeigt, dass die meisten Latenzen kleiner als 250us sind. Allerdings hat es auch einige Ausreisser | ||
+ | |||
+ | ===== Diskussion ===== | ||
+ | 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: |