Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:linux:preempt_rt:start [2016-05-24 14:20] mgehrig2software:linux:preempt_rt:start [2023-04-11 09:52] (aktuell) – gelöscht Urs Graf
Zeile 1: Zeile 1:
-<box red 100% | Hinweis> Diese Seite ist in Bearbeitung. Marcel Gehrig 24.05.2016 </box> 
  
-====== Preempt_RT ====== 
-===== Vorwort ===== 
- 
-<box blue right 22% | **Linux Preempt_RT**> 
-{{.:preemptrtlogo.png|Preempt_RT}} 
-[[https://rt.wiki.kernel.org/index.php/Main_Page | Projektwebseite]] 
-</box> 
- 
-<box 22% right green | **Beispiele für den Bau von RT-Kernel**> 
-  * [[software:linux:phyCORE-MPC5200B:Kernel_v4_4_15RT | v4.1.15-rt17+ (Real-time) für phyCORE-MPC5200B]] 
-  * [[.:kernel_V3.18.29rt30 | v3.18.29rt30 (Real-time) für x86]] 
-  * [[.:RealtimeDebian | v3.14.18-rt9 (Real-time) Debian-Way]] 
-</box> 
- 
-Preempt_RT ist ein von Ingo Molnar betreuter Patch für den Linux Kernel. Dieser modifiziert den Kernel so, dass dieser (beinahe) vollständig präemptiv wird. Dazu werden die klassischen Kernel Spinlocks durch Mutexe ersetzt, welche Prioritätsvererbung unterstützen. Ausserdem wird die Behandlung aller Interrupts in eigene Kernel-Threads ausgelagert. 
- 
- 
-===== Bau von RT Kernel ===== 
-Siehe grüne Box //"Beispiele für den Bau von RT-Kernel"// für diverse Beispiele. 
- 
- 
-===== Messung der RT-Performance ===== 
-Bei RT Systemen ist die Latenz ein wichtiges Mass. In diesem Zusammenhang wird auch oft von der maximalen Latenz gesprochen. Es ist allerdings nicht ganz einfach die maximale Latenz zu messen. 
- 
- 
-==== Schwierigkeiten bei der Messung der RT-Performance ==== 
-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 weiter unten im Kapitel //"Künstliche Last"//. 
- 
-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. 
- 
-==== Cyclictest ==== 
- 
- 
-==== EEROS ==== 
-Siehe Projektwebseite. (Noch in Arbeit. Marcel Gehrig 24.05.2016) 
- 
- 
-==== Künstliche Last ==== 
-=== dd === 
-dd ist ein Linux Befehl, der zum bit-genauen Kopieren von Festplatten, Partitionen oder Dateien dient. Er kann genutzt werden, um eine 100% Prozessorlast zu erhalten. 
-Folgende Codebeispiele kopieren keine wirklichen Daten und überschreiben auch keine, lasten die CPU aber voll aus. <code>dd if=/dev/zero of=/dev/null</code> 
-Um mehrere Kerne auszulasten (in diesem Beispiel sind es 4) kann folgender Befehl genutzt werden. <code>fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd</code> 
-Obwohl diese Befehl die CPU voll auslastet, sollten die Ergebnisse des //Cyclictests// nicht beeinflusst werden. 
- 
-=== Cache Calibrator === 
-* [[http://homepages.cwi.nl/~manegold/Calibrator/ | Projektwebseite]] 
-Der //Cache Calibrator// ist ein kleines C-Programm, dass die Leistung der Caches misst.  Bei dieser Messung werden die Caches stark belastet. Der //Cyclictest// soll bei einem RT fähigen System aber trotzdem keine merklich schlechtere Ergebnisse liefern. 
-== Installation == 
-* Den [[http://homepages.cwi.nl/~manegold/Calibrator/src/calibrator.c | Quellcode]] herunterladen 
-* Für die eigene Maschine compilieren <code>gcc calibrator.c -o calibrator -lm</code> 
-* Für eine andere Maschine cross compilieren <code>//Noch ausstehend//</code> 
- 
- 
-===== Links ===== 
-  * [[https://rt.wiki.kernel.org/index.php/Main_Page | Dokumentation (Linux RT-Wiki)]] 
-  * [[https://www.kernel.org/pub/linux/kernel/projects/rt/ | Download]] 
-  * [[http://lwn.net/Articles/146861/ | Sehr gute Beschreibung zur Implementierung]] 
-  * [[http://www.osadl.org/Realtime-Preempt-Kernel.kernel-rt.0.html Wie testen?| ]]