FAQ
Die Anzahl der Fragen und Antworten hängt davon ab, ob Sie angemeldet sind.
Echtzeitsystem
Wie können Echtzeiteigenschaften in C#-Programmen genutzt werden?
Windows selbst ist kein Echtzeitsystem. Um Echtzeiteigenschaften zu erreichen, ist es notwendig, die zeitkritischen Code-Teile im Echtzeitkontext (auf der Kernel-Ebene) auszuführen. Da C# aufgrund der .NET-Umgebung nicht direkt im Echtzeitkontext ausgeführt werden kann, ist das Zeitverhalten weiterhin vom Windows-Scheduler abhängig. Hierbei besteht die Möglichkeit, den zeitkritischen C#-Threads eine hohe, absolute Thread-Priorität zuzuweisen.
Diese Möglichkeit hatte man als Anwendungsprogrammierer bislang nicht. Kithara stellt dazu die entsprechenden Mechanismen bereit. Dies kann zumindest dafür sorgen, sich Vorrang vor allen anderen Windows-Anwendungsaktivitäten zu verschaffen. Für wirkliches Echtzeitverhalten sollten die entscheidenden Code-Teile mit C++ oder Delphi in eine DLL ausgelagert werden, die dann direkt in den Echtzeitkontext geladen wird.
Für die Kommunikation zwischen Anwendungs- und Echtzeitkontext stehen Shared Memory, Daten- und Message-Pipes, Events oder Sockets zur Verfügung. Eine Reihe von mitgelieferten Beispielprojekten verdeutlicht, wie „harte“ Echtzeit in C#-Anwendungen eingebettet werden kann.
Wodurch kann Jitter bei Echtzeit-Tasks hervorgerufen werden?
Durch das
Dedizieren von CPUs für Kithara RealTime kann Einfluß von Windows selbst oder anderer Software unter Windows auf das Echzeitverhalten nahezu komplett ausgeschlossen werden.
Allerdings kann die konkrete Hardware mehr oder minder gute Echtzeitfähigkeiten bieten und insbesondere Konfigurationsoptionen in BIOS/UEFI können die Echtzeitfähigkeiten erheblich beeinträchtigen.
-
C1E = Enhanced Power-Save-Modes der CPU.
Die Stromsparmechanismen moderner CPUs führen dazu, dass diese schnell in Schlafzustände wechseln und dafür Funktionsblöcke abschalten. Das Aufwachen aus diesen Stromsparmodi kostet wertvolle Zeit und führt somit zu unvorhersehbaren Latenzen. Für bestes Echtzeitverhalten sollten alle Stromsparmodi deaktiviert werden.
Sie finden diese Einstellung (je nach BIOS/UEFI) unter Menüpunkten wie z.B.- C1E
- C-States
- Deeper C States
-
SpeedStep
Die Stromsparmechanismen moderner CPUs führen dazu, dass diese häufig die Betriebstakte temporär ungenutzter CPUs absenken. Diese, bei Bedarf, wieder anzuheben kostet wertvolle Zeit und führt somit zu unvorhersehbaren Latenzen.
Für bestes Echtzeitverhalten sollten alle dynamischen Taktanpassungen deaktiviert werden.
Sie finden diese Einstellung (je nach BIOS/UEFI) unter Menüpunkten wie z.B.- EIST
- SpeedStep
- Turbo Boost
- PowerNow!
- Cool'n'Quiet
-
Legacy USB Support
Führt erfahrungsgemäß (je nach UEFI Implementation) zu verschlechtertem Echtzeitverhalten und sollte daher abgeschaltet sein. -
Hyperthreading / Simultaneous Multithreading (SMT)
Für die meisten Einsatzszenarien empfielt sich Hyperthreading abzuschalten, damit jede einzelne 'logische' CPU auch tatsächlich jederzeit deterministisch Zugriff auf all ihre Rechenwerke hat, siehe den entsprechenden Hinweis beim Dedizieren von CPUs für Kithara RealTime. -
WBINVD = Assembler Befehl zum Leeren aller internen Caches.
Wird z.B. von Nvidia-Grafiktreibern benutzt. Abhilfe schafft nur der Verzicht auf Software, die diesen Befehl nutzt, im Falle von Hardware-Treibern nur der Wechsel auf Alternativen.