OpenAMP - A long story

Unsere Erfahrungen mit OpenAMP erstrecken sich nun schon über mehrere Jahre. Dieses Beispiel zeigt, wie sich durch die jahrelange Auseinandersetzung verteilt auf mehrere Personen und Abschlussarbeiten mit einem Thema das Kompetenzfeld unserer Firma kontinuierlich vertieft hat.

Was ist OpenAMP?

AMP bedeutet: Mehrere unterschiedliche Betriebssysteme werden auf einem heterogenen Multiprocessor-SoC betrieben. OpenAMP ist ein Open Source Framework der Arbeitsgruppe Multicore Assocation (MCA), das standardisierte Implementierungen von AMP-Funktionalitäten für Bare Metal oder FreeRTOS-Umgebungen zur Verfügung stellt. Es basiert auf dem Remoteproc und dem RPMsg Framework im Linux-Kernel. Remoteproc wird genutzt, um von einer Host-Umgebung aus die Firmware für eine Remote-Umgebung zu laden und den Remote-Prozessor zu starten. RPMsg dient zur Kommunikation zwischen verschiedenen Umgebungen in AMP-Systemen.

Der Einstieg: Ein Multilevel-Umrichter für Batteriespeichersysteme

Im Zuge des von der Bayerischen Forschungsstiftung geförderten Projektes MBATT ergab sich die Notwendigkeit, auf dem Embedded System ein Multiprocessing System zu realisieren, das kombiniert symmetrisch und asymmetrisch laufen sollte und harte Echtzeitanforderungen erfüllt.

Auf modernen, komplexen SoCs ist ein Nebeneinander von Linux und parallel dazu ein RTOS sowie eine Bare-metal-Anwendung realisierbar. Dabei sind jedoch einige Herausforderungen zu lösen: das Speichermanagement, das Verteilen von Interrupts, die Interprozessorkommunikation (IPC) sowie das Lifecycle-Management des Co-Prozessors. Eine Möglichkeit, diese Herausforderungen anzugehen ist, OpenAMP einzusetzen. Es ist standardisiert und wird dadurch von vielen SoC-Herstellern wie Xilinx oder NXP unterstützt. Zusätzlich vereinheitlicht eine standardisierte Programmierschnittstelle (API) den Entwicklungsprozess für die Software. OpenAMP kombiniert dazu bestehende Techniken mit neuen Entwicklungen und unterstützt die Verwendung von Linux, RTOS und Bare-metal-Anwendungen auf heterogenen sowie homogenen Systemen.

OpenAMP wurde nun bei MBATT erfolgreich eingesetzt und die dabei gemachten Erfahrungen wurden im Beitrag Viele Kerne – zwei Möglichkeiten am 13.2.2020 veröffentlicht. Dabei wird der Einsatz von OpenAMP unter Linux und mit Bare-metal/RTOS beschrieben und einige Praxistipps zur Entwicklung gegeben.

Die Weiterentwicklung: Asymmetrisches Multiprocessing auf einem i.MX8X mit OpenAMP

Im selben Jahr 2020 nahm sich David im Rahmen seiner Masterarbeit "Entwicklung, Umsetzung und Evaluierung von Asymmetric Multiprocessing anhand OpenAMP auf dem heterogenen MPSoC i.MX8X" des Themas an. Embedded-Anwendungen müssen performant, preiswert, sicher und energieeffizient sein. Deswegen werden immer mehr heterogene Multi-Processor System-on-Chip (MPSoC) eingesetzt, da sie aus mehreren unterschiedlichen Prozessoren aufgebaut sind, die jeweils für gezielte Anwendungen unabhängig voneinander verwendet werden können und dadurch ein breites Leistungsspektrum von Anwendungsfällen in der Industrie abdecken.

Auf den integrierten unterschiedlichen Prozessoren eines heterogenen MPSoC werden unterschiedliche Betriebssysteme eingesetzt: Linux auf dem Cortex-A35 und ein RTOS oder Bare-Metal auf einem Microcontroller wie ein Cortex-M4. Der Einsatz von AMP-Systemen bringt in der Praxis eine Menge Herausforderungen mit sich. Die erste Problemgruppe ist die Interprozessorkommunikation und umfasst die Aufteilung des Speichers für die verwendeten Betriebssysteme und das Festlegen des Shared-Memorys, das von beiden Prozessoren zum Austausch von Daten genutzt werden soll.

Die zweite Problemgruppe stellt das Lifecycle-Management dar. Es muss geklärt werden, welcher Prozessor das Starten, Laden und Herunterfahren von Firmwares für andere Prozessoren übernimmt. Wichtig ist hierbei, dass der Coprozessor mit unterschiedlichen Firmwares geladen werden kann, ohne andere Prozessoren zum Absturz zu bringen.

Zu der Zeit gab es noch keinen allgemein anerkannten und standardisierten Lösungsansatz für diese Probleme, weshalb viele Firmen proprietäre Lösungen entwickelten. In diese Lücke stieß Davids Arbeit mit dem Ziel, einen möglichst allgemeingültigen Ansatz für die Interprozessorkommunikation und das Lifecycle-Management auf AMP-basierten MPSoCs zu finden. Auch hier bot OpenAMP vielversprechende Möglichkeiten zur Vereinfachung von Interprozessorkommunikation und Lifecycle-Management. Ein geeigneter Entwurf sollte auf die Hardware-Plattform i.MX8X von NXP implementiert werden und auf relevante Eigenschaften wie Latenzzeiten oder Datendurchsatz evaluiert werden.

Zur Entwicklung setzte David den Variscite VAR-SOM-MX8X basierend auf dem MPSoC i.MX8X von NXP und zusätzlich ebenfalls von Variscite das Development-Board Symphony-Board ein (Abb. 1).

System
System

Das OpenAMP Framework wurde erfolgreich auf den Cortex-M4 portiert und die RemoteProc- Komponente im eingesetzten Linux-Kernel erweitert, um das Lifecycle-Management auf dem Embedded-Linux durchzuführen. Für die Evaluierung des umgesetzten AMP-Systems wurden auf dem i.MX8X die Anwendungszssenarien "Prozessdatenüberwachung" und "Hardware-in-the-Loop" auf Latenzzeiten und Datendurchsatz gemessen. Die Messergebnisse zeigten hohen Ausreißer bei den Latenzzeiten, deren Ursache im Rahmen dieser Arbeit nicht ermittelt wurden, da es nicht das Ziel war. Die Arbeit war aber ein voller Erfolg und wurde mehrfach veröffentlicht, u.a. unter Asymmetric Multiprocessing on Heterogeneous Multiprocessor Systems sowie Development and evaluation of asymmetric multiprocessing on a heterogeneous multiprocessor system.

Der nächste Schritt: Portierung auf einen MPSoC der neuen i.MX93-Familie von NXP

Aus einer Abschlussarbeit ergeben sich in der Regel weitere, spannende Fragen für weitere Untersuchungen. So übernahm 2023 Malte die Staffel mit seiner Masterarbeit "Analysis and Optimization of the Jitter in the Interprocessor Communication Latency with OpenAMP on a Heterogeneous Multiprocessor System-on-Chip". Ziel seiner Arbeit war es, die Interprozessorkommunikation mit OpenAMP zwischen der Linuxumgebung und dem RTOS-basierten Prozessor zu analysieren und zu verbessern, um die Einsetzbarkeit von OpenAMP für Real Time-Systeme voranzubringen. Dabei sollten die bedeutendsten Faktoren für den Jitter der Kommunikationslatenz im Datentransfer vom RT-Prozessor zur Linuxumgebung und umgekehrt festgestellt werden. Verbesserungen der Interprozessorkommunikation sollten den Jitter reduzieren und damit die längsten Übertragungszeiten abkürzen. Zusätzlich dazu sollte die Lösung von David auf einen neueren MPSoc portiert werden, den PIMX9352CVUXKAA aus der i.MX93 MPSoC-Familie von NXP. Er besitzt zwei ARM Cortex-A55 als Application Processing Units und einen ARM Cortex-M33 als Real-Time Processing Unit.

Malte portierte nicht nur die Lösung vom i.MX8X auf den i.MX93, sondern er implementierte auch ein neuartiges Messsystem, um den Latenzausreißern auf die Spur zu kommen. Die Ergebnisse dieser Messungen zeigten, dass das Hauptproblem in der Verarbeitung der Interprozessor-Interrupts in der Linuxumgebung liegt. Das beschreibt Malte auf dieser Webseite unter FreeRTOS Meets Linux - Analyse und Optimierung von OpenAMP. Eine Veröffentlichung seiner Arbeit als Fachartikel ist in die Wege geleitet.

Die spannende Frage bleibt: Was kommt als nächstes OpenAMP-Thema? Wir bleiben dran.