Suchen

Hand in Hand für das Multicore-Debugging und -Tracing

Autor / Redakteur: Andrea Martin * / Franz Graser

Die Anzahl der Cores in Multicore-Prozessoren steigt stetig. Prozessor- und Debuggerhersteller müssen eng zusammenarbeiten, um ein effizientes Debugging zu ermöglichen.

Firmen zum Thema

Beim Debugging von SMP-Systemen wird für alle Cores nur eine einzige Debugger-Instanz gestartet.
Beim Debugging von SMP-Systemen wird für alle Cores nur eine einzige Debugger-Instanz gestartet.
(Grafik: Lauterbach)

Viele moderne Geräte werden heute von einem Multicore-Prozessor gesteuert. Ingenieure, die solche Geräte entwickeln, müssen sich deshalb mit dem Thema Multicore-Debugging auseinandersetzen. Die optimale Aufgabenverteilung auf die Cores, der Umgang mit gemeinsam genutzten Ressourcen, die Gesamtperformance des Systems – all das muss getestet und verifiziert werden. Dieser Artikel stellt die wichtigsten Konzepte für das Multicore-Debugging vor und fasst gleichzeitig die Voraussetzungen zusammen, die ein Prozessor mitbringen muss, um ein effizientes Multicore-Debugging zu ermöglichen.

Die Basis für das Multicore-Debugging ist zunächst ein Debugger, der alle eingesetzten Cores unterstützt. Da die möglichen Core-Kombinationen vielfältig sind, muss der Tool-Hersteller breit aufgestellt sein. Seine Produktpalette sollte Standard-Cores, DSPs sowie eine Vielzahl von anwendungsspezifischen Cores umfassen.

Die vom Debugger angebotenen Testmöglichkeiten ergeben sich aus der im Prozessor implementierten Debug-Logik. Deshalb wollen wir uns zuerst diesem Thema zuwenden.

Für das Debugging stellen Prozessoren in der Regel eine JTAG-Schnittstelle zu Verfügung. Besitzt der Debugger vollständige Informationen über den Aufbau des Multicore-Prozessors, dann kann er über diese Schnittstelle auf die einzelnen Cores zugreifen. Dadurch kann er den Zustand des Gesamtsystems aus der Perspektive eines Cores auslesen und verändern sowie die Programausführung auf den Cores starten und stoppen. Damit man mit Hilfe eines Debuggers die Interaktion zwischen den einzelnen Cores zeitgenau testen kann, muss der Prozessor eine Synchronisationslogik bereitstellen, die es erlaubt, alle Cores zeitgleich zu starten und zu stoppen.

Features zur Analyse komplexer Systemfehler sowie zur Performanceoptimierung kann ein Debugger dann anbieten, wenn der Prozessor Logik enthält, die es erlaubt, prozessor-interne Abläufe für den Debugger sichtbar zu machen. Damit sind wir beim Thema Nachverfolgung (Tracen) angekommen. Für das Multicore-Debugging haben sich zwei Trace-Arten bewährt:

  • Core-Traces, die Informationen über die Programmausführung der einzelnen Cores generieren. Idealerweise ist im Prozessor für jeden Core ein solches Tracemodul implementiert.
  • Der so genannte System-Trace, der Diagnosedaten über prozessor-interne Abläufe aufsammelt und ausgibt. Dabei können die Diagnosedaten durch Code-Instrumentierung erzeugt werden oder von Hardware-Modulen wie etwa dem Power Management kommen.

Asymmetrisches versus symmetrisches Multiprocessing

Welches Debug-Konzept beim Multicore-Debugging zu Tragen kommt, hängt im Wesentlichen davon ab, ob die Embedded-Applikation als SMP- oder AMP-System organisiert ist.

Hat man ein SMP-System (SMP steht für Symmetric Multiprocessing), dann steht die Performancesteigerung durch Parallelisierung im Vordergrund. Statt von einem Core werden die Applikationsaufgaben von mehreren Cores bearbeitet. Die Verteilung der gleichzeitig anstehenden Applikationsaufgaben auf die Cores übernimmt das SMP-Betriebssystem. Die Zuweisung erfolgt dabei dynamisch zur Programmlaufzeit. Vereinfacht ausgedrückt bedeutet dies, dass eine zur Bearbeitung anstehende Aufgabe einem gerade freien Core zugewiesen wird.

Für SMP-Systeme muss man einen Prozessor verwenden, der für dieses Einsatzszenario entwickelt wurde. Ein solcher Prozessor enthält zwei oder mehr identische oder zumindest befehlssatz-kompatible Cores, die den Speicher und die Peripheriemodule gemeinsam nutzen können, sowie Mechanismen zur Cache Kohärenz.

Ganz anders verhält es sich bei AMP-Systemen (AMP steht für Asymmetric Multiprocessing). Hier erhofft man sich eine Performance-Steigerung, indem man die allgemeinen Applikationsaufgaben von einem Standard-Core bearbeiten lässt. Spezialaufgaben werden an anwendungsspezifische Cores vergeben. Die Aufteilung der Applikationsaufgaben auf die unterschiedlichen Cores ist hier statisch und wurde bereits in der Designphase des AMP-Systems vorgenommen.

In diesem Multicore-System werden die allgemeinen Applikationsaufgaben von einem SMP-System übernommen, das aus zwei Cortex-A9 Cores besteht, während ein DSP die Spezialaufgaben bearbeitet.
In diesem Multicore-System werden die allgemeinen Applikationsaufgaben von einem SMP-System übernommen, das aus zwei Cortex-A9 Cores besteht, während ein DSP die Spezialaufgaben bearbeitet.
( Lauterbach)

Zwar kommen AMP- und SMP-Systeme noch heute in ihrer Reinform vor. Weit häufiger sind aber AMP-Systeme, in denen die allgemeinen Applikationsaufgaben auf einem SMP-System laufen, während Spezialaufgaben wie etwa die Bildverarbeitung oder die Getrieberegelung von anwendungsspezifischen Spezialkernen ausgeführt werden.

(ID:42675722)