Migration medizinischer Geräte auf mehrere Prozessorkerne Umsteigen auf Multicore

Komplexe Benutzerschnittstellen und hoch auflösende Bildgebung in modernen medizinischen Geräten benötigen eine hohe Rechenleistung - entsprechend steigt auch auf diesem Gebiet der Bedarf für Multicore-Verarbeitung, wie sie in der Konsumelektronik, beispielsweise in Smartphones, bereits vielfach zu finden ist.

Ein medizinisches Gerät für Patienten mit leichten kognitiven Beeinträchtigungen kann im Bereich des betreuten Wohnens zum Beispiel die Überwachung lebenswichtiger Funktionen übernehmen, einen Sturz oder Notfall erkennen und einen Alarm auslösen.

Zudem kann es als Medikamenten-Dosiereinrichtung dienen sowie visuelle und akustische Hinweise ausgeben, und so den Patienten bei allen Aktivitäten vom Essen bis hin zum Einkauf von Lebensmitteln unterstützen.

Ein solches Gerät muss klein und tragbar sein, eine moderne, kontextsensitive Anwenderschnittstelle haben, Hinweise über den Aufenthaltsort und die jeweilige Aktivität des Patienten erkennen und ihn bei Bedarf mit Sprachanweisungen, Bildern oder Video unterstützen (Bild 1). Dies alles sind rechenintensive Aufgaben, für die Multicore-Verarbeitung meist die beste Lösung darstellt. Noch vor einigen Jahren haben die Halbleiteranbieter die Rechenleistung durch den Einsatz größerer Prozessoren mit höheren Taktraten gesteigert.

Dieser Ansatz brachte für eine Singlecore-Entwicklung drei entscheidende Einschränkungen: Stromverbrauch und Wärmeerzeugung stiegen schneller als die Taktrate, die Speichergeschwindigkeit konnte nicht mit der Prozessorgeschwindigkeit Schritt halten, und die Ressourcen-, Steuer- und Datenabhängigkeiten begrenzten die mit einem Single-Instruction-Stream mögliche Parallelität.

Zur Überwindung dieser Grenzen entwickelten die Hersteller Multicore-Prozessoren. Da sie eine viel höhere Verarbeitungskapazität pro Gramm, Watt und Quadratmillimeter bieten als Singlecore-Prozessoren, spielen sie mittlerweile eine zentrale Rolle im Produktspektrums der großen Halbleiteranbieter, die inzwischen Chips mit zwei, vier oder noch mehr integrierten Cores anbieten.

Beim Implementieren eines Multi-core-Systems müssen sich die Gerätehersteller entweder für die Migration eines bestehenden Singlecore-Systems auf Multicore oder das Design eines völlig neuen Systems auf Multicore-Basis entscheiden. In der Praxis ist es meist sinnvoller und effizienter, nur bestimmte Teile eines bestehenden Systems zu migrieren und andere neu zu entwickeln. Unabhängig von der gewählten Strategie ist die sorgfältige Auswahl des Betriebssystems entscheidend für den Erfolg des Projekts.

Das Betriebssystem muss Multicore unterstützen

Ein medizinisches Gerät, bei dem Zuverlässigkeit und Verfügbarkeit zu den entscheidenden Anforderungen gehören, wird wahrscheinlich ein Echtzeitbetriebssystem (RTOS) benötigen. Dieses RTOS sollte einen symmetrischen Mehrprozessorbetrieb (SMP) unterstützen, der eine einzige Instanz des RTOS für das Thread-Scheduling und das Ressourcen-Management aller Prozessor-Cores nutzt. Dieser Ansatz ist einfacher und bietet eine bessere Leistung als ein asymmetrischer Mehrprozessorbetrieb (AMP), der unterschiedliche Betriebssystem-Instanzen (oder sogar unterschiedliche Betriebssysteme) auf jedem Core nutzt.

Das ausgewählte RTOS muss verhindern, dass sich Fehler in einem Prozess auf das gesamte System ausbreiten, und es muss einzelne Prozesse beim Auftreten von Fehlern neu starten können. Eine Mikrokernel-Architektur, bei der Anwendungen, Gerätetreiber, Dateisysteme und Netzwerk-Stacks alle außerhalb des Kernels in separaten Adressbereichen liegen und damit sowohl vom Kernel als auch untereinander isoliert sind, ist vermutlich die optimale Lösung.

Auf Grund der großen Zahl von Prozessen und Threads in einem Multicore-System ist ein Fehlerwiederherstellungs- (oder High-Availability-)Watchdog ebenfalls sehr wichtig. Dieser Watchdog kann ausgefallene Prozesse wieder starten oder, falls die es Situation erfordert, ein rechtzeitiges und geordnetes Abschalten des Systems veranlassen. Um eine hohe Verlässlichkeit des Systems zu gewährleisten, sollte das RTOS außerdem folgende Punkte unterstützen:

  • Zeitpartitionierung (vorzugsweise adaptiv), sodass kritische Prozesse nicht zu viele CPU-Zyklen blockieren können,
  • Prioritätsvererbung, um eine Prioritätsinversionen zu verhindern (siehe Bild 2), und
  • Prozessoraffinität, besonders BMP (Bound Multi-Processing), eine Erweiterung von SMP, mit dem die Entwickler wichtige Prozesse und ihre Tochterprozesse zur Ausführung auf bestimmten Cores beschränken können.

Durch BMP können die Entwickler sicherstellen, dass ältere, für Ein-Prozessor-Systeme entwickelte Anwendungen problemlos und ohne Anpassung laufen, zudem können sie genau festlegen, wie sie die einzelnen verfügbaren Cores nutzen wollen.

Weniger kritische, aber rechenintensive Prozesse wie die Benutzerschnittstelle und die Darstellung hochauflösender Bilder lassen sich so zum Beispiel allen verfügbaren Cores oder einem Teil der Cores zuweisen.

Die Entwickler können auch kritische Komponenten auf einen Core beschränken, um das Design, das Debugging und die Validierung zu vereinfachen.

Tools für Multicore

Die Entwickler benötigen Tools, die das Design, Debugging und die Optimierung von Multicore-Anwendungen unterstützen.

Das Multicore-RTOS sollte durch ein Tool-Set unterstützt werden, mit dem sich die Lastverteilung abschätzen, Engpässe identifizieren und Möglichkeiten für einen Parallelbetrieb erkennen lassen (Bild 3).

Ferner sollte es möglich sein, die Interaktionen zwischen Threads auf mehreren CPUs zu charakterisieren und zu debuggen sowie Threads oder ganze Prozesse von einem Core auf den anderen zu verlagern und die Auswirkungen auf die Systemleistung zu messen. Timing und Blocking können ein schwieriges Thema sein, deshalb sollte es das Tool dem Entwickler ermöglichen, genau zu erkennen, was die Prozessoren und Threads machen.

Zertifizierung eines medizinischen Multicore-Geräts

Konformität ist eine unverzichtbare Voraussetzung, um ein medizinisches Gerät auf den Markt bringen zu können.

Neben einem geeigneten Betriebssystem und Tools ist für ein medizinisches Gerät daher außerdem eine gut geplante Zertifizierungsstrategie erforderlich.

Bedenken, dass die Komplexität eines Multicore-Systems zu gewissen Problemen im Hinblick auf die Zertifizierung führt, haben einige Hersteller bislang daran gehindert, Multicore-Processing einzusetzen.

Tatsächlich aber bedeutet die inhärente Komplexität von Singlecore- als auch von Multicore-Systemen in der Praxis, dass a) diese Systeme nicht einfach durch Tests validiert werden können und dass b) die gleichen Verfahren genutzt werden können und sollten, um Singlecore- und Multi-core-Systeme zu validieren. Wer schon einmal eine Zertifizierung eines Systems durchgeführt hat, kennt die anzuwendenden Verfahren (Bild 4).

Hierzu gehören:

  • Tests - obwohl sich ausschließlich durch Tests nur das Vorhandensein von Fehlern und nicht die Abwesenheit von Fehlern nachweisen lässt, ist ein Test immer noch ein entscheidendes Element in der Systemvalidierungsstrategie.
  • Statistische Analyse - durch die Untersuchung von Einsatzdaten von Geräten oder Komponenten im Feld lässt sich mit einer statistischen Analyse die Zuverlässigkeit überprüfen. Zudem ist mittels einer bewussten Fehlereinfügung (Fault Injection) während der Validierung eine Abschätzung der Anzahl der in einem System noch vorhandenen Fehler möglich.
  • Fehlerbaumanalyse - die Fehlerbaumanalyse beginnt mit potenziellen oder tatsächlich festgestellten Ausfällen und ermöglicht eine Ermittlung der möglichen Ursachen für einen Ausfall.
  • Design-Verifizierung - wird während der Entwicklung und nachträglich mit Tools wie SPIN und NuSMV, durchgeführt. Die Designverifizierung ist eine effektive Möglichkeit zur Überprüfung der Systemzuverlässigkeit.
  • Design-Artefakte - ein ausgereifter Software-Lebenszyklus mit allen dazugehörigen Design-
  • Artefakten, vom Projektplan bis hin zur Traceability-Matrix, ist eine standardmäßige und entscheidende Komponente der Zertifizierung.

Obwohl es naiv wäre zu behaupten, dass die Validierung eines Multicore-Systems der eines Singlecore-System entspricht, müssen und können doch die gleichen Verfahren eingesetzt werden.

Zugegeben: Multicore-Systeme sind komplexer als Single-core-Systeme, zudem ergeben sich einige neue Komplexitäten und Herausforderungen. Jedoch kann die sorgfältige Auswahl des Betriebssystems speziell im Hinblick auf die Unterstützung von Prozessor-Affinität für Thread-Hierarchien und die Verfügbarkeit von entsprechenden Tools die Herausforderungen beim Systemdesign sowie bei der Entwicklung und Validierung reduzieren.

Wie bei Singlecore-Systemen erfordert auch die Zertifizierung von Multicore-Systemen höchste Disziplin. Unabhängig davon ob ein, zwei oder 16 Prozessoren enthalten sind - Softwaresysteme sind heute zu komplex für eine Validierung ausschließlich durch Tests. Bei beiden Arten von Systemen müssen die gleichen Verfahren zur Validierung genutzt werden, und auch sonst gibt es für die Hersteller medizinischer Geräte keine Gründe, auf die Nutzung des immer leistungsfähigeren Multicore-Processing zu verzichten.

Über den Autor:

Justin Moon ist Produktmanager Medical bei QNX Software Systems.