Windows für Echtzeit-Anwendungen durch Real-time Accelerator Technologie
Überblick
Immer mehr Anwendungen, insbesondere im Markt für industrielle Automatisierung, der Medizintechnik, der Datenerfassung und Messtechnik, erfordern deterministisches Echtzeitverhalten. Mit der Real-time Accelerator (RtaccWin) Technologie ist es möglich, unter Windows hart echtzeitfähige Anwendungen deterministisch auszuführen. Dies gelingt durch die exklusive Reservierung von einer oder mehreren CPUs für die Echtzeitanwendung, der entsprechenden Parametrierung von Windows und den acontis Kernel-Treibern für präzises Timing und für den direkten Hardware-Zugriff.
Software Architektur
Auf PCs mit Windows IoT Enterprise oder Windows Professional ermöglicht die acontis RtaccWin Technologie einen stabilen, echtzeitfähigen Betrieb von Applikationen mit einer garantierten Zykluszeit von 1 ms. Auch schnellere Zykluszeiten sind grundsätzlich realisierbar. Dazu wird mindestens eine CPU exklusiv für die Echtzeitanwendung reserviert. Die anderen CPUs stehen den Standard Windows Anwendungen zur Verfügung.
Der RtaccTimer.sys Windows System Treiber von acontis liefert den präzisen, einstellbaren Takt für die gesamte Anwendung. Um deterministisches Verhalten sicherzustellen, darf die Echtzeitanwendung in der Regel keine Standard Windows Treiber verwenden. Der RtaccDevice.sys Kernel Treiber von acontis ermöglicht den direkten Zugriff auf Hardware, z. B., Netzwerkkarten, Feldbuskarten, etc. aus dem Windows User-Mode. Dies ermöglicht, z. B., das Senden und Empfangen von Ethernet-Frames ohne Verwendung des Windows Netzwerk-Stacks. Das Ergebnis ist ein deterministisches Verhalten, ein geringerer Jitter, eine deutlich geringere CPU-Auslastung und keine negativen Auswirkungen bei paralleler Nutzung von anderen Netzwerkinterfaces.
Konfigurationswerkzeug RtaccWinConfig
Mit dem Tool RtaccWinConfig erfolgt die Einrichtung des Windows Systems für Echtzeitanwendungen. In einem ersten Schritt wird mindestens eine CPU isoliert. Dies bedeutet, dass Standard Windows Prozesse und Dienste diese CPU nicht mehr verwenden. Die isolierte CPU steht dann exklusiv für die Echtzeitanwendungen zur Verfügung.
Eine weitere Funktion des RtaccWinConfig Tools ist die Zuweisung von Hardware an die Echtzeitanwendung. Dies bedeutet, dass der Standard Windows-Treiber entladen wird und fortan der Zugriff auf die Hardware aus dem Windows User Space erfolgen kann. Der acontis Kernel-Treiber RtaccDevice.sys ermöglicht den schnellen, direkten Zugriff auf alle Speicherbereiche der Karte.
Softwareentwicklung
Die Entwicklung der Echtzeitanwendung unterscheidet sich nicht grundlegend von der einer normalen Windows Anwendung. Folgende Schritte sind prinzipiell durchzuführen:
- Einrichten des Systems mit dem Tool RtaccWinConfig
- Ein oder mehrere Threads für die Echtzeitaufgaben erzeugen
- Diese Threads der zuvor isolierten CPU zuweisen
- Den Threads eine sehr hohe Priorität zuweisen → „Real-time Threads“ sind verfügbar
- Optional: Erzeugung eines stabilen und präzisen Taktes durch Windows System Treiber RtaccTimer.sys
Ein Windows Prozess kann sich somit aus mehreren „non-Real-time Threads” und mehreren “Real-time Threads” zusammensetzen. Alle Threads haben Zugriff auf die globalen Variablen und können die Standard Mechanismen (Event, Critical Section, Mutex, Semaphore, etc.) zur Synchronisation verwenden. Das vertraute Win32 Standard API steht auch in den „Real-time Threads“ zur Verfügung. Für den gesamten Entwicklungsprozess kann die volle Funktionalität von Microsoft Visual Studio genutzt werden. Im Debug-Mode kann auf alle Ressourcen von allen Threads zugriffen werden. Selbstverständlich können auch die „Real-time Threads“ wie gewohnt nur Schritt-für-Schritt ausgeführt werden, dann allerdings ohne Echtzeitverhalten.
Performance
Für Echtzeitanwendungen ist ein stabiler, präziser Takt mit möglichst geringem Jitter sehr wichtig. Dieser Takt wird z. B. benötigt, um eine Regelschleife jede Millisekunde auszuführen. In der Theorie soll dabei die Anwendung exakt nach jeweils 1000 Mikrosekunden getriggert werden. In der Praxis gibt es jedoch hiervon Abweichungen nach oben (größeres Zeitinterval) und nach unten (kürzeres Zeitinterval). Mit der Real-time Accelerator Technologie können unter Windows diese Abweichungen, sprich der Jitter, um Größenordnungen reduziert werden.
Mit dem Programm RtaccWinConfig kann eine Performance Messung auf der isolierten CPU mit einer bestimmten Zykluszeit durchgeführt werden. Die Abweichungen nach oben (= Maximalwert) und nach unten (=Minimalwert) werden grafisch angezeigt. Wie groß der maximale Jitter sein darf, hängt von der Anwendung ab. In der Regel sind 10% der Zykluszeit noch akzeptabel, d.h., bei einer Zykluszeit von 1000 usec, sollte der Minimalwert >= 900 usec und der Maximalwert <= 1100 usec sein.
Ohne die Real-Time Accelerator Technologie schwankt Zykluszeit sehr stark. Nach acht Stunden ergeben sich auf einen Minis Forum U820 (i5-8279U CPU) mit Windows IoT folgende Messwerte.
Hinweis: Neben der Messroutine von acontis wurde das System mit Burn-In Test von Passmark stark belastet.
Mit aktivierter Real-Time Accelerator Technologie kann ein präziser Takt mit geringen Abweichungen garantiert werden. Nach acht Stunden ergeben sich auf einen Minis Forum U820 (i5-8279U CPU) mit Windows IoT folgende Messwerte.
Hinweis: Neben der Messroutine von acontis wurde das System mit Burn-In Test von Passmark stark belastet.
Real-time TCP und UDP Kommunikation mit lwIP (light weight TCP/IP Stack)
Auf Windows ist es nicht möglich eine schnelle Netzwerkkommunikation via TCP oder UDP Sockets zu garantieren, so es ist beispielweise nicht möglich alle 5 Millisekunden ein UDP-Paket zu verwenden oder zu empfangen und zu verarbeiten. Ursache hierfür ist nicht nur die fehlende Echtzeitfähigkeit des Windows-Betriebssystems, sondern auch die fehlende Echtzeitfähigkeit des NDIS TCP/IP Stacks und der Netzwerkkartentreiber.
Damit auf Windows eine stabile, garantierte, zyklische Kommunikation über Sockets möglich wird, müssen somit neben der RtaccWin Technologie auch ein geeigneter TCP/IP Stack und Netzwerktreiber eingesetzt werden.
Die weit verbreitete Open-Source Software lwIP (light weight IP) ist ein TCP/IP Stack und unterstützt eine Vielzahl von Protokollen, u.a., IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE und enthält clients für DHCP, DNS, einen SNMP agent und unterstützt AutoIP/APIPA (Zeroconf).
Der lwIP TCP/IP Stack läuft als Prozess im User Space auf einer isolierten CPU. Die Anbindung der Ethernet-Schnittstelle erfolgt mit Hilfe von acontis Real-time Ethernet Treibern. Diese Treiber kommunizieren direkt mit der Hardware ohne Verwendung von Windows Kerneltreibern. Dies ermöglicht den Real-time Threads eine schnelle, echtzeitfähige Kommunikation über Ethernet mit den Protokollen TCP und UDP.
Messungen zeigen eine erhebliche Verringerung des Jitters
Um die effektiven maximalen Durchlaufzeiten und den Jitter für das Senden und Empfangen eines UDP-Frames zu ermitteln hat acontis ein geeignetes Testsystem aufgebaut: Die Netzwerkschnittstelle des PCs (Minis Forum U820 i5-8279U) mit Windows 10 IoT ist über ein Ethernet-Kabel direkt mit einem EtherCAT SubDevice (Beckhoff EK1100) verbunden. Die Übertragungsrate beträgt 100 Mbit/s und das SubDevice hat eine sehr kurze und gleichmäßige Durchlaufverzögerung von ca. einer Mikrosekunde. Neben dem Messprogramm wurde das System durch einen parallellaufenden Burn-In Test sehr hoch belastet.
Die Messergebnisse zeigen deutlich die Vorteile der RtaccWin Technologie in Verbindung mit dem lwIP Stack und den acontis Real-time Ethernet Treibern. Mit dem Standard Windows Setup kann es im Worst-Case mehr als 26.000 µs dauern, bis das gesendete UDP-Frame wieder empfangen wurde. Mit aktivem RtaccWin, jedoch weiterhin mit Windows NDIS Stack und Treibern, sinkt dieser Wert 4.896 µs. Wird zusätzlich zu RtaccWin der lwIP Stack verwendet, beträgt der Worst Case Wert beeindruckend niedrige 396 µs.
Damit lässt sich ein zyklischer Datenaustausch von einer Millisekunde realisieren.
Funktionen
- Schnelle Reaktionszeiten innerhalb von Mikrosekunden
- Harte Echtzeit mit Real-Time Accelerator Technologie mit Hilfe von CPU-Isolation
- Echtzeitfunktionen und Standardfunktionen in einem Prozess auf einer isolierten CPU
- RtaccTimer Treiber zur Erzeugung eines präzisen, stabilen Taktes
- RtaccDevice Treiber für den direkten Zugriff auf Hardware ohne Kernel-Treiber
- Komfortables Konfigurationswerkzeug RtaccWinConfig
Vorteile
- Echtzeitanwendungen können wie normale Windows-Anwendungen entwickelt werden
- Standard Win32 API auch in Real-time Threads verfügbar
- Unterstützung von Microsoft Visual Studio. Komfortables Entwickeln und Debuggen der gesamten Echtzeitanwendung
- Einfacher Datenaustausch über Variablen. Keine komplizierte Kommunikation zwischen Real-time und non-Real-time Teil der Anwendung erforderlich
- Sehr einfache Handhabung und geringer Einarbeitungsaufwand
Systemvoraussetzungen
- Windows 10 IoT Enterprise oder Windows 11 IoT Enterprise
- Windows 11 Professional
- Quad Core CPU