Echtzeit Latenzen in eingebetteten Anwendungen verstehen und verringern (Teil 2)

Von Ofra Bechor, GHS 9 min Lesedauer

Anbieter zum Thema

Missionskritische eingebettete Systeme erfordern außergewöhnliche Zuverlässigkeit, hohe Leistung und vor allem Reaktionsfähigkeit in Echtzeit. Während im ersten Teil dieses Artikels die Schlüsselfaktoren, die zur Latenz beitragen, untersucht wurden, werden im zweiten Teil Strategien zur Reduzierung der Latenz durch die Verwendung eines RTOS, Interrupt-Optimierungen, Low-Level-Programmierung und Hardware-Software-Co-Design vorgestellt

Im zweiten und letzten Teil der Artikelserie zu Latenzen wird gezeigt, wie sich Latenz mit dem richtigen RTOS, Interrupt-Optimierung, Low-Level-Code und Co-Design gezielt senken lässt.(Bild:  Green Hills Software)
Im zweiten und letzten Teil der Artikelserie zu Latenzen wird gezeigt, wie sich Latenz mit dem richtigen RTOS, Interrupt-Optimierung, Low-Level-Code und Co-Design gezielt senken lässt.
(Bild: Green Hills Software)

In sicherheitskritischen Systemen wie Medizintechnik oder Kfz-Steuerungen ist ein Echtzeitbetriebssystem (Realtime Operating System, RTOS) ein Eckpfeiler für eine vorhersehbare Leistung. Durch die Priorisierung von Echtzeitbedingungen stellt es sicher, dass Aufgaben in einem vorhersehbaren Zeitrahmen ausgeführt werden. Ein Schlüsselelement ist deterministische Ablaufplanung: Prioritätsbasiertes, präemptives Scheduling stellt sicher, dass Aufgaben mit hoher Priorität sofort ausgeführt werden, was zeitkritische Verzögerungen, die in weniger deterministischen Systemen auftreten können, reduziert.

Ein RTOS führt in der Regel nur minimalen Overhead ein, da der Kernel in der Regel klein ist (Mikrokernel), so dass die Aufgaben schneller und vorhersehbarer ausgeführt werden können. Es kann auch die Priorisierung von Aufgaben nutzen, um kritischen Operationen Vorrang vor Aufgaben mit niedrigerer Priorität zu geben. Dies ist wichtig, um sicherzustellen, dass Echtzeitfristen in sicherheitskritischen Szenarien wie medizinischen Geräten oder industriellen Steuerungen eingehalten werden.

Bildergalerie

Trotz dieser Vorteile können bestimmte Faktoren innerhalb des RTOS immer noch zu Latenzzeiten auf Softwareebene beitragen. So kann etwa die Kontextumschaltung, die zwar für die Bearbeitung mehrerer Tasks erforderlich ist, insbesondere bei suboptimalen Schedulern oder einer sehr hohen Anzahl von Tasks einen Overhead verursachen. Wenn Interrupts nicht effizient verwaltet werden, können Interrupt-Anforderungen zu Engpässen führen und die Ausführung wichtiger Aufgaben verzögern.

Suboptimale Planung und eine hohe Anzahl von Tasks können die Latenzzeit noch weiter erhöhen. Falsch verwaltete Interrupts oder unbehandelte Prioritätsumkehrungen - bei denen eine Aufgabe mit hoher Priorität von einer Aufgabe mit niedrigerer Priorität blockiert wird, die eine gemeinsam genutzte Ressource hält - können diese Vorteile untergraben, es sei denn, sie werden durch Mechanismen wie die Prioritätsvererbung gemildert (Bild 1).

Bestimmte Kerneloperationen oder Datenstrukturen (z. B. Scheduler-Daten, Warteschlangenverwaltung) erfordern Sperren oder kritische Abschnitte, um die Datenkonsistenz zu gewährleisten. Während dieser Zeit können Interrupts oder Taskwechsel aufgeschoben werden. Wenn der RTOS-Kernel eine Sperre zu lange hält (z. B. beim Kopieren großer Puffer oder bei komplexen Listenmanipulationen), können Tasks oder Interrupts mit höherer Priorität nicht fortgesetzt werden. Wenn der Kernel die Neuplanung bis zum Ende eines kritischen Abschnitts aufschiebt, können Aufgaben, die eigentlich hätten vorgezogen werden sollen, weiterlaufen, wodurch sich die Latenzzeit für dringendere Aufgaben erhöht.

Obwohl das RTOS einen wesentlichen Beitrag zu einer niedrigen Systemlatenz leistet, ist bei der Auswahl eines bestimmten RTOS und der Einrichtung des Systems Vorsicht geboten. Es ist notwendig, die Arbeitslast der Anwendung zu analysieren, um den Aufgaben optimale Prioritäten zuzuweisen und sicherzustellen, dass kritische Funktionen ohne unnötige Verzögerungen ausgeführt werden. Um Verzögerungen durch Kontextwechsel zu verringern, sollten ähnliche Aufgaben gruppiert und die Fragmentierung von Aufgaben reduziert werden. Achten Sie auch auf eine effiziente Interrupt-Verwaltung, d. h. halten Sie ISRs kurz und verschieben Sie unkritische Aktivitäten auf Hintergrundprozesse. Wenn möglich, sollten kritische Abschnitte im Kernel klein gehalten werden und lock- bzw. wait-freie Datenstrukturen verwendet werden. Der Kernel sollte auch auf Operationen überprüft werden, die Interrupts oder Planungen für längere Zeit blockieren könnten.

Zudem ist es empfehlenswert, spezielle Hilfsmittel zu nutzen, die über das reine RTOS hinausgehen, wie etwa Echtzeit-Debugging-Tools, (Latenz-)Profiling-Dienstprogramme oder Virtualisierungslösungen (Hypervisoren), die eine robuste Partitionierung von Ressourcen ermöglichen. So können mehrere RTOS-Instanzen mit minimalen Latenzauswirkungen nebeneinander bestehen.

Optimierte Interrupt-Verarbeitung

Medizinische Beatmungsgeräte haben strenge Echtzeitanforderungen für die Verarbeitung von Atmungssignalen, sind aber auf Interrupts angewiesen, um einige Funktionen zu erfüllen. Die Minimierung der Unterbrechungslatenz stellt sicher, dass das Gerät Änderungen in der Atmung eines Patienten schnell erkennt und sich darauf einstellt, um so die Sicherheitsanforderungen zu erfüllen.

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Die Art und Weise, wie Interrupts gehandhabt werden, hat einen erheblichen Einfluss auf die gesamte Echtzeit-Reaktionsfähigkeit eines Systems wie eines medizinischen Beatmungsgeräts. Übermäßig lange ISRs oder schlechte Prioritätszuweisungen können die Reaktionsfähigkeit des Gesamtsystems beeinträchtigen. Aufgaben mit niedrigerer Priorität, das heißt nicht zeitkritische Aufgaben, werden besser von Hintergrund-Threads und nicht im Interrupt-Kontext behandelt.

In vielen RTOS-basierten Systemen werden Interrupts gelegentlich deaktiviert, um kritische Abschnitte oder gemeinsam genutzte Ressourcen zu schützen. Die Deaktivierung von Interrupts kann jedoch die Reaktionsfähigkeit in Echtzeit stark beeinträchtigen, da in der Zwischenzeit keine neuen Interrupts bedient werden können. Dieser Aufschub der Interrupt-Bearbeitung erhöht die Interrupt-Latenz, was bei zeitkritischen Aufgaben zu verpassten Fristen führen kann. Um diese Risiken abzuschwächen, setzen Echtzeitsysteme in der Regel strenge Grenzen für die Dauer der Interrupt-Abschaltung. Alternativ werden Synchronisationsmechanismen - wie z. B. die Vererbung von Prioritäten - eingesetzt, um Unterbrechungszeiten zu minimieren oder zu eliminieren.

Low-Level-Programmierung

Die Low-Level-Programmierung bietet mehr Kontrolle über die Systemressourcen, ermöglicht eine fein abgestimmte Latenzoptimierung und macht es möglich, jede Mikrosekunde an Leistung zu nutzen. Die Umgehung der Betriebssystemebene durch Bare-Metal-Programmierung kann den mit der Aufgabenplanung, dem Speicherschutz und der Kontextumschaltung verbundenen Overhead eliminieren. Dies wird häufig in extrem kritischen Schleifen verwendet, wie z. B. bei Motorsteuerungssystemen, bei denen Präzision und Timing von größter Bedeutung sind.

Die Optimierung Ihrer Scheduling-Strategie - selbst in einem RTOS - kann die Häufigkeit von Kontextwechseln verringern, was wiederum den Overhead reduziert. Der Einsatz von Strategien wie der Prioritätsvererbung kann ebenfalls dazu beitragen, die korrekte Reihenfolge der Aufgabenausführung beizubehalten.

Hardware-/Software-Co-Design

In eingebetteten Systemen mit ressourcenbeschränkter Hardware ist es von entscheidender Bedeutung, das richtige Gleichgewicht zwischen in Hardware oder in Software implementierten Funktionsblöcken zu finden. Ein Co-Design-Ansatz, der Hardware- und Softwareentwicklungsprozesse integriert, um die Systemleistung und Ressourcennutzung zu optimieren, ist hier entscheidend.

Nehmen wir zum Beispiel eine militärische Drohne, die Hardware-Beschleuniger zur Bildverarbeitung verwendet, um bestimmte Objekte zu erkennen und/oder anzuvisieren. Durch Auslagerung rechenintensiver Bildverarbeitungsaufgaben auf dedizierte Beschleuniger wird die Haupt-CPU entlastet, so dass die Flugsteuerung ohne Latenzspitzen erfolgen kann, was wiederum zu erfolgreich abgeschlossenen Missionen beiträgt. Bei anderen Anwendungen können spezielle Hardware-Beschleuniger, wie FPGAs oder spezielle ML-Prozessoren, eingesetzt werden, um die CPU von kryptografischen Operationen zu entlasten, die sofortige Ergebnisse erfordern. Direkter Speicherzugriff (DMA) entlastet die CPU, indem Datenübertragungen zwischen Peripheriegeräten und Speicher unabhängig voneinander abgewickelt werden. Das erhöht den Durchsatz und verringert die Unterbrechungslast.

Bei der Anwendung dieser Optimierungen ist es wichtig, die Kompromisse zu verstehen (und im Auge zu behalten), die man eingehen muss. Wenn etwa Aufgaben auf spezialisierte Hardware ausgelagert werden, kann die Latenzzeit erheblich reduziert werden, aber auch die Flexibilität (die für wechselnde Arbeitslasten erforderlich sein kann). Ein FPGA ist viel flexibler als ein ASIC, aber immer noch weniger flexibel als ein rein softwarebasierter Ansatz. Zudem erfordert Hardware-Software-Co-Design Fähigkeiten sowohl bei Hardware (Board-Level-Engineering) als auch Software (RTOS-Tuning, Treiberentwicklung), sowie ein gewisses interdisziplinäres Fachwissen. Dieser Co-Design-Ansatz erschwert die Systemüberprüfung, da eine gemeinsame Bewertung des Software-Timings und des Hardware-Verhaltens erforderlich ist. So muss beispielsweise ein spezieller Beschleuniger nicht nur auf seine Funktion, sondern auch auf seine Echtzeit-Interaktion innerhalb des Gesamtsystems überprüft werden, was häufig eine Analyse der Worst-Case-Ausführungszeit erfordert.

Verstehen der Latenz durch Monitoring

Die Verringerung von Latenzen erfordert präzise Messungen, genaue Überwachung und iterative Optimierung. Software-Entwicklungstools und Dienstprogramme wie Trace-Probes können Echtzeitmetriken verfolgen und messen und Einblicke in Interrupt-Latenz, Kontextwechselzeiten, CPU-Auslastung und Speicherzugriff geben. Fortgeschrittene Tools wie die integrierte Entwicklungsumgebung (IDE) MULTI von Green Hills bieten zudem Vorteile wie Back-in-Time-Debugging, synchrone Laufkontrolle oder Multitasking/Multicore-Support (Bild 2).

Diese Tools gewähren Einblick in Interrupt-Services-Zeiten (Wie schnell kann ein ISR initiiert und abgeschlossen werden?), Kontextwechselzeit (Welcher Overhead entsteht durch das Umschalten zwischen Tasks?), Speicherzugriffslatenz (Wie schnell kann das System Daten im RAM oder in den Caches lesen/schreiben?) und protokollbedingte Verzögerungen (Welche Kommunikationslatenz kommt bei Einsatz von SPI, I2C, Ethernet, CAN hinzu?)

Innovate Your Software – for a Smarter Future

Deutschlands Leitkongress der Embedded-Softwarebranche

Embedded Software Engineering Kongress

Das Programm des ESE Kongress umfasst 96 Vorträge, 21 Seminare und 3 Keynotes. Seien Sie dabei, wenn sich die Embedded-Software-Community trifft, und nutzen Sie Diskussionen und Expertengespräche für einen ergiebigen Wissenstransfer und erfolgreiches Networken. Während der vier Kongresstage erwartet Sie zudem eine große Fachausstellung mit den führenden Firmen der Branche. Erfahren Sie alles über die neuesten Trends, Herausforderungen und Lösungen im Embedded Software Engineering, von KI, Safety und Security bis hin zu Management und Innovation.

Integration von ML und KI

Mit der Weiterentwicklung eingebetteter Systeme treiben neue Paradigmen wie Künstliche Intelligenz, Maschinelles Lernen und Edge Computing die Innovation beim Entwurf von Systemen mit geringer Latenz voran. Mit KI- und/oder ML-Algorithmen, die lokal implementiert sind statt Cloud-Dienste zu benötigen, ist die Entscheidungsfindung in Echtzeit einfacher zu erreichen. Dies ist etwa bei KI-basierten Kamerasystemen für die Qualitätskontrolle in intelligenten Fabriken von großem Vorteil. Um dies zu ermöglichen, integrieren viele Halbleiterhersteller spezielle Beschleuniger (GPU, DSP, dedizierte Beschleuniger für neuronale Netze) in ihre Produkte.

KI/ML-Algorithmen basieren in der Regel nicht nur auf Multiplikations-Akkumulations-Zyklen (MAC), sondern erfordern auch viele Speichertransaktionen, Modelle müssen mit Techniken wie Quantisierung und Pruning optimiert werden, um die Verarbeitungsgeschwindigkeit auf Edge-Geräten zu erhöhen.

Edge Computing bedeutet im Allgemeinen die Verteilung von Berechnungen auf lokale Geräte, wodurch die Abhängigkeit von zentralen Servern verringert wird. Bei latenzempfindlichen Anwendungen wie intelligenten Fabriken oder vernetzten Fahrzeugen minimiert die Verarbeitung von Daten näher an der Quelle die Kommunikationsverzögerungen. Die Edge-Knoten können in einem solchen Szenario erste Analysen durchführen (z. B. Erkennung von Anomalien, Objekterkennung), bevor sie die zusammengefassten Ergebnisse in die Cloud senden. Dieser Ansatz ist in Fällen, in denen eine sofortige Reaktion erforderlich ist, unerlässlich.

Obwohl die Technologie in diesem Bereich erhebliche Fortschritte gemacht hat, bleiben einige Herausforderungen bestehen. So erfordert die Ausführung komplexer KI-Modelle auf eingebetteter Hardware mit begrenzten Speicher- und Rechenressourcen eine sorgfältige Abwägung zwischen Durchsatz, Genauigkeit und Reaktionsfähigkeit in Echtzeit. Letzteres ist besonders wichtig, wenn harte Echtzeit erforderlich ist und ein RTOS verwendet wird. Die Integration von KI-Aufgaben in ein RTOS-basiertes System erfordert Scheduling-Strategien, die sicherstellen, dass sowohl herkömmliche Echtzeitaufgaben als auch KI-Inferenzaufgaben strenge Fristen einhalten.

Schließlich sind bei der Entwicklung eines KI/ML-basierten Systems auch Saftey und Security zu berücksichtigen. Bei KI-gesteuerten Entscheidungen in sicherheitskritischen Umgebungen ist eine robuste Verifizierung und Validierung unerlässlich. Im Automobilbereich beispielsweise stellen funktionale Sicherheitsnormen wie ISO26262 strenge Anforderungen, die mit KI-gesteuerten, in Echtzeit arbeitenden Steueralgorithmen in Einklang gebracht werden müssen. Das stellt eine besondere Herausforderung für die Verifizierung und Validierung dar.

Künftige Systeme werden wahrscheinlich herkömmliche eingebettete Echtzeitanforderungen mit KI-Funktionen kombinieren. Das beschleunigt die Entwicklung hin zu mehr autonomen, anpassungsfähigen eingebetteten Geräten. Die Entwicklung von Systemen, die RTOS-Optimierungen, Hardware-Beschleunigung und effiziente KI/ML-Frameworks integrieren, sind für die Erfüllung dieser neuen Anforderungen von zentraler Bedeutung.

Künftige Chancen und Herausforderungen

Die Optimierung für niedrige Latenzzeiten ist nach wie vor ein Eckpfeiler des Designs eingebetteter Systeme, insbesondere bei unternehmenskritischen Anwendungen, bei denen Leistung und Sicherheit an erster Stelle stehen. Techniken wie die Optimierung der Interrupt-Verarbeitung, der Einsatz von Echtzeit-Betriebssystemen, die Nutzung von Low-Level-Programmierung und die Implementierung von Hardware-/Software-Co-Design können die Systemlatenz erheblich reduzieren.

KI, ML und Edge Computing bieten neue Möglichkeiten und neue Herausforderungen für Echtzeit-Reaktionsfähigkeit. KI-Workloads, die in Edge-Knoten ausgeführt werden, erfordern sowohl hohe Rechenleistung als auch geringe Latenz, was den Bedarf an speziellen Beschleunigern und fortschrittlichen Echtzeit-Softwarearchitekturen erhöht. Latenzursachen zu verstehen und zu wissen, wie man sie abmildern kann, ist bei der Entwicklung der nächsten Generation intelligenter, agiler und zuverlässiger eingebetteter Systeme entscheidend. (sg)

(ID:50615389)