Architektur Hocheffiziente Trace-Funktion für RISC-V

Von Peter Shields, Siemens EDA 5 min Lesedauer

Anbieter zum Thema

Die Akzeptanz von RISC-V-Prozessoren nimmt zu. Diese Technologie hat, wie alles andere auch, Vorteile und Risiken. Der offene Standard bedeutet Freiheit für viele Entwickler, aber der Erfolg hängt von der Entwicklung eines Ökosystems zur Unterstützung von RISC-V ab. Ein Beispiel dafür ist die Einführung einer effizienten Trace-Funktion für RISC-V-Kerne.

Abbildung 1 – Mit Prozessor-Trace kann die Programmausführung auf einer CPU in Echtzeit überwacht werden. (Bild:  Siemens)
Abbildung 1 – Mit Prozessor-Trace kann die Programmausführung auf einer CPU in Echtzeit überwacht werden.
(Bild: Siemens)

Bei der Integration von RISC-V-Prozessorkernen müssen die Entwickler wissen, ob der RISC-V-Kern verifiziert ist, dem Standard entspricht und fehlerfrei ist. Welche Tools stehen für Design, Verifikation, Kompilierung, Betriebssystemunterstützung, Debugging und Trace zur Verfügung? Für Debugging und Trace benötigen Entwickler eine Lösung, die sicherstellt, dass sich die Software wie erwartet verhält, was passiert, wenn sie nicht das tut, was sie erwarten, und wie der Kern mit dem Rest des Systems interagiert.

Wie Prozessor-Trace das Risiko reduziert

Das Verständnis des Programmverhaltens in einem komplexen System ist eine Herausforderung. Diese Techniken verlangen in der Regel das Anhalten des Kerns, um die Software zu debuggen (Run-Stop-Debugging). Es ist jedoch eine nicht-intrusive, vollständige Beobachtung des Programmverhaltens erforderlich.

Bildergalerie
Bildergalerie mit 5 Bildern

„Efficient Trace for RISC-V“ bietet die Möglichkeit, die Programmausführung bei voller Geschwindigkeit zu verfolgen. Trace ist eine Debugging-Technik, bei der die ausgeführten Prozessorbefehle auf dem Chip erfasst, komprimiert und dann an eine Host-Software übertragen werden, die die Programmausführungssequenz später rekonstruiert (Abbildung 1). Es ermöglicht die Beobachtung bei voller Geschwindigkeit, forensisches Debugging, Code-Profiling, die Suche nach zufälligen Fehlern und die Vermeidung von Heisenbugs (Softwarefehler, die verschwinden, wenn man sie untersucht).

Da SoCs jedoch immer größer und komplexer werden, bringt die Ablaufverfolgung von Prozessoren eigene Herausforderungen mit sich. Die Lösung besteht in einer besseren Kodierung (Komprimierung) und Dekodierung.

Vorteile von RISC-V Trace

Anstatt zu versuchen, jede mögliche Anweisung zu erfassen, was zu unüberschaubaren Datenmengen führen würde, verwendet der RISC-V-Standard die Prozessorverzweigungsverfolgung, bei der nur Verzweigungen (oder Deltas) im Programmcode gemeldet werden. Tatsächlich wurde der RISC-V-Standard in Anerkennung dieser Tatsache als „Efficient Trace for RISC-V“ bezeichnet. Die Verzweigungsverfolgung des Prozessors erzielt eine sehr hohe Komprimierung. Dadurch lassen sich mehr Daten nachverfolgen, z. B. mehrere Kerne gleichzeitig nachverfolgen oder ein größerer Verlauf in einem Trace-Puffer fester Größe speichern.

Der RISC-V-Standard beschreibt mehrere optionale und zur Laufzeit konfigurierbare Modi. Einige sind darauf ausgelegt, die Effizienz der Kodierung noch weiter zu steigern, während andere als Debugging-Hilfe bei der Entwicklung von Software-Trace-Decodern verwendet werden können.

Ein genauerer Blick auf die RISC-V-Verzweigungsverfolgung

Trace beginnt mit der Meldung einer bekannten Startadresse, die die Decoder-Software innerhalb der Programm-Binärdatei (oder ELF-Datei) finden kann. Es werden nur Verzweigungen im Programmcode gemeldet; Verzweigungen können Sprünge, Anrufe, Rückgaben, Unterbrechungen oder Ausnahmen sein. Bei allen Anweisungen, die zwischen Verzweigungsanweisungen liegen, wird davon ausgegangen, dass sie sequentiell ausgeführt werden. Dadurch besteht keine Notwendigkeit, sie zu melden, was zu einer beträchtlichen Einsparung bei der Verfolgungs-Bandbreite führt. Es wird nur gemeldet, ob Verzweigungen genommen werden oder nicht.

Indirekte Sprünge, Unterbrechungen und Ausnahmen (bekannt als „uninferable program counter discontinuities“) treten auf, wenn der Programmzähler um einen Betrag geändert wird, der nicht allein aus dem Programm-Binärcode ermittelt werden kann und die Meldung der Zieladresse erfordert. Unterbrechungen (und Ausnahmen) treten im Allgemeinen asynchron auf und erfordern, dass die Adresse, an der der normale Programmfluss unterbrochen wurde, ebenfalls gemeldet wird. Die Verzweigungsverfolgung wird auch als „Instruction Delta Tracing“ bezeichnet, da Deltas typischerweise durch Verzweigungsanweisungen eingeführt werden.

Als Beispiel folgt die Ausführung eines Codes, der zur Berechnung der Fakultät einer bestimmten Zahl verwendet wird (Abbildung 2). Angenommen, das Register ‚a0‘ enthält den Wert 2 (für den die Fakultät berechnet wird). Trace beginnt mit der Angabe der Startadresse. Die folgenden sequenziellen Anweisungen müssen nicht gemeldet werden. Die erste Verzweigungsanweisung, die auftritt, wird nicht ausgeführt und als solche gemeldet. Die nachfolgenden Anweisungen werden sequenziell ausgeführt und nicht gemeldet. Die nächste Verzweigung wird genommen, springt zurück zu Adresse 14 und wird als genommen gemeldet. Sequenzielle Anweisungen werden wie bisher nicht gemeldet. Schließlich wird beim zweiten Mal die letzte Verzweigung nicht genommen und als solche gemeldet.

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

Was ist das Besondere an der Efficient-Trace-for-RISC-V-Spezifikation?

Die Embedded Analytics Group von Siemens hat die Entwicklung des RISC-V-Trace-Standards maßgeblich vorangetrieben und ist Vorreiter bei kommerziell erhältlichen Implementierungen. Die Gruppe lieferte im Januar 2018 den ersten RISC-V-Trace-Encoder, bevor die RISC-V-Trace-Arbeitsgruppe gebildet wurde. Im Mai 2022 wurde die Version 2 der Efficient-Trace-for-RISC-V-Spezifikation ratifiziert, welche den Daten-Trace beinhaltet, wie er bereits im Siemens Encoder implementiert ist.

Für weitere Informationen laden Sie die Efficient Trace for RISC-V-Spezifikation herunter.

  • Der Efficient-Trace-for-RISC-V-Standard erfordert deutlich weniger Bits pro Anweisung als ältere Kodierungstechniken (Abbildung 3). Eine höhere Kodierungskomprimierung ist aus mehreren Gründen wichtig für eine effiziente Verfolgung, darunter:
  • Längeres Tracen – Unabhängig davon, ob die Aufzeichnung im On-Chip-Speicher oder im Speicher eines Trace-Probe-Geräts mit fester Größe gespeichert wird, ermöglicht eine höhere Komprimierung ein längeres Tracen. Dies ist wichtig, wenn das auslösende Ereignis einige Zeit vor der Beobachtung des Effekts eintritt.
  • Schnelleres Tracen – Da mit kleineren Prozessgeometrien eingebettete CPUs mit immer höheren Taktgeschwindigkeiten laufen können, stellt eine effiziente Trace-Komprimierung sicher, dass Traces nicht durch den Gegendruck des Off-Chip-Transports verloren gehen.
  • Mehr Traces – Eine höhere Komprimierung ermöglicht es, mehrere Kerne gleichzeitig zu tracen. Dadurch wird es einfacher zu verstehen, wie mehrere Kerne miteinander interagieren.
  • Geringere Bandbreite – Die durch effiziente Kodierung erzielten niedrigeren Datenraten stellen geringere Anforderungen an den Off-Chip-Transportmechanismus, so dass weniger Pins, ein geringerer Stromverbrauch oder weniger anspruchsvolle Schnittstellen-IP verwendet werden können.

Der hohe Wirkungsgrad des RISC-V-Trace-Standards stellt sicher, dass er für heutige und zukünftige SoC-Designs geeignet ist. Die Siemens-Implementierung, der Tessent Enhanced Trace Encoder (Abbildung 4), umfasst alle obligatorischen und optionalen Funktionen des Efficient-Trace-for-RISC-V-Standards sowie eine wichtige Funktion, die noch nicht Teil des Standards ist: Die zyklusgenaue Ablaufverfolgung. Damit kann der Programmierer die Softwareleistung optimieren, indem er feststellt, wo sie ins Stocken gerät. Der Enhanced Trace Encoder ermöglicht dies, indem er die Anzahl der Zyklen mit zusammenhängend ausgeschiedenen Anweisungen angibt, gefolgt von der Anzahl der Zyklen, in denen keine Anweisungen ausgeschieden wurden. Diese Zykluszählungen werden kodiert, um die Informationen zu komprimieren.

Der Tessent Enhanced Trace Encoder ist nur ein Teil einer kompletten Systemlösung. Dias Debuggen und Tracen in einem System endet nicht mit der Erfassung der Daten. Neben einer Reihe von Analyse-, Nachrichten- und Kommunikations-Modulen bietet Tessent auch die Software zur Analyse und Interpretation der Trace-Ergebnisse. Mit den Komponenten von Tessent Embedded Analytics kann der Programmierer jedes Design debuggen und tracen, von einfachen Einzelprozessorsystemen bis hin zu hochkomplexen superskalaren Multiprozessorsystemen.

(mbf)

* Peter Shields ist Produktmanager bei Siemens Digital Industries Software mit besonderem Fokus auf die Produktfamilie Tessent Embedded Analytics. Er verfügt über mehr als 25 Jahre Erfahrung in den Bereichen Engineering, Engineering Management und Customer Engineering sowohl in der EDA als auch in der Halbleiter-IP, insbesondere für komplexe SoCs. Peter Shields war vor seiner Übernahme durch Mentor/Siemens leitendes Mitglied des Apps Engineering Teams bei UltraSoC und hatte zuvor Positionen bei Synopsys, Imagination Technologies, Mentor/Logicvision und Cadence inne. Er hat einen BEng-Abschluss von der University of Birmingham, Großbritannien.

(ID:49609061)