FUNKTIONEN · LAUFZEIT-TRACE

Sieh deine Firmware laufen.

Wann laufen deine Funktionen, Tasks und Interrupts, welche kosten die meiste Zeit, und warum war dieser Aufruf langsam? Von KymoCore auf dem Mikrocontroller aufgezeichnet, live in KymoStudio angezeigt.

Laufzeit-Trace
Laufzeit-Trace einer ESP32-FreeRTOS-Demo: Task-Spuren nach Core 0 und Core 1 gruppiert, lange Aufrufe rot hervorgehoben und ein gewählter process_frame-Aufruf mit verschachtelten Aufrufen

Das Problem

Eine Schleife ist manchmal zu langsam, ein Task verpasst seine Periode, und ausgegebene Zeitstempel verändern genau das Zeitverhalten, das du sehen willst. Pins für den Logic Analyzer gehen schnell aus und zeigen nicht, welche Funktion gerade beschäftigt war.

Was Kymotrace macht

Makros in deiner Firmware zeichnen Funktionsein- und -austritte, Marker, ISRs und Task-Wechsel in einen begrenzten Puffer auf. KymoStudio macht daraus eine Zeitachse, einen Aufrufbaum und Statistiken – über dieselbe Leitung wie deine Messwerte.

So funktioniert es

  1. 1InstrumentierenTracing in KymoCore einschalten und Funktionen oder Schleifendurchläufe mit Scope-Makros umschließen. Standardmäßig aus, abgeschaltet wegkompiliert.
  2. 2Zeitachse ansehenScope-Spannen, Marker und Lücken je Task und Core. Einen Aufruf wählen, um seinen Funktionsablauf zu öffnen.
  3. 3Ursache findenAuf Hotspots umschalten: Eigenzeit, Streuung, Zeitverhalten einer Funktion und was langsame Aufrufe langsam macht.

Zeitachse und Funktionsablauf

Laufzeit-Trace

Scope-Spannen, Marker und Aufzeichnungslücken auf einer lesbaren Zeitachse. Sehr dichte Fenster werden als Aufrufdichte gezeichnet.

Funktionsablauf

Der Aufrufbaum eines gewählten Aufrufs – nur sein Teilbaum und die Marker seines Tasks, über Auswahl und Zeitcursor mit dem Trace verbunden.

Tasks und ISRs je Quelle

Jede Quelle listet ihre Tasks und Interrupts mit Aufrufzahl. Ein Klick filtert die Zeitachse.

Nach Core gruppiert

Auf Mehrkern-Targets werden die Spuren je CPU-Core gruppiert; Aufrufe mit Core-Wechsel sind markiert.

Aufzeichnen und abspielen

Aufzeichnung speichern, wieder öffnen, Abspielgeschwindigkeit wählen und Ereignis für Ereignis durchgehen. Export als CSV oder Chrome-Trace-JSON.

Lücken bleiben sichtbar

Verlorene oder übersprungene Ereignisse werden als Lücke markiert statt versteckt.

Funktionsablauf
Funktionsablauf eines langsamen process_frame-Aufrufs auf einem ESP32 mit verschachtelten Aufrufen und Markern

Hotspots und Zeitverhalten

Berechnet aus den Ein- und Austritten, die KymoCore ohnehin aufzeichnet – ohne Firmware- oder Protokolländerung.

Hotspots

Jede Funktion mit Aufrufen, Eigenzeit, Anteil, typischer Laufzeit und Maximum. Als Liste oder nach Task gruppiert.

Streuung auf einen Blick

Ein Balken von Minimum über typisch bis p95 und Maximum. Funktionen, deren p95 mindestens doppelt so lang ist wie typisch, sind markiert.

Zeitverhalten einer Funktion

Periode, Frequenz, Jitter und Auslastung periodischer Schleifen; Abstände und Laufzeit-Perzentile für lastabhängige Worker.

Jeder Aufruf über die Zeit

Ein Punktdiagramm aller Aufrufe zeigt Lastphasen und Ausreißer. Ein Klick öffnet den Aufruf im Funktionsablauf.

Langsam gegen typisch

Vergleicht die langsamsten Aufrufe je Unteraufruf mit typischen und zeigt, woher die Mehrzeit kommt.

Lange Aufrufe in Rot

Hebt optional Aufrufe hervor, die mehr als doppelt so lange dauern wie typisch für ihre Funktion.

Hotspots
Hotspots eines ESP32-FreeRTOS-Traces nach Task gruppiert, mit Streuungsbalken und dem Zeitverhalten einer Funktion

In der Firmware

Die Trace-Makros gehören zu KymoCore. Mainloop-Firmware braucht kein RTOS; Task- und Interrupt-Ereignisse ergänzen den Kontext, wenn dein Plattform-Port sie liefert.

ESP32-FreeRTOS-Trace-Demo in KymoProbe →

// Kontexte und Symbole kommen aus dem generierten Profil
void process_frame(void)
{
    KYMO_TRACE_SCOPE(&recorder, KYMO_CONTEXT_MAIN, KYMO_SYMBOL_PROCESS_FRAME);
    parse_payload();
    decompress();
}

Kernpunkte

  • Funktionen, Tasks und ISRs auf einer Zeitachse, je CPU-Core
  • Hotspots und Zeitverhalten ohne Firmware-Änderung
  • Teilt sich eine Leitung mit deinen Messwerten
  • Standardmäßig aus, abgeschaltet wegkompiliert

Ehrliche Grenzen

  • Die Zeiten sind Wanduhrzeiten auf dem Target; Unterbrechungen durch andere Tasks oder ISRs sind enthalten
  • CPU-Zeit je Task braucht Scheduler-Ereignisse aus deinem Plattform-Port
  • Die Abdeckung von ISRs und Scheduler hängt vom Port ab; eine Zertifizierung für Timing oder ISR-Sicherheit wird nicht beansprucht

Flashe die ESP32-Trace-Demo und sieh ihr beim Laufen zu.

KymoStudio 2.7.0 laden Schnellstart