Die meisten Ansichten sind auf vergleichbare Weise verknüpft: Die Hauptansicht ist mit den ergänzenden Ansichten verlinkt, die wiederum mit anderen ergänzenden Ansichten und der Hauptansicht verknüpft sind. Hierdurch wird es einfacher, zwischen verschiedenen Perspektiven der Trace-Daten zu wechseln, wenn ein bestimmter Abschnitt analysiert werden soll.
Thread-Priorisierung überprüfen
Einige Embedded-Linux-Systeme nutzen fest vorgegebene (Echtzeit-)Scheduling-Prioritäten für zeitkritische Threads, um störende Einflussnahmen durch weniger zeitkritische Threads zu unterbinden. Allerdings ist das Einstellen der richtigen Prioritäten entscheidend für einen zuverlässigen und reaktionsschnellen Betrieb. Beansprucht ein Thread hoher Priorität zu viel CPU-Zeit, so ist dies in den CPU-Auslastungs- und Antwortzeitdiagrammen erkennbar (Bild 4). Auch der Statistikreport bietet einen Überblick über Thread-Prioritäten, CPU-Auslastung und Timing-Statistiken und kann herangezogen werden, um die Thread-Prioritäten im Allgemeinen zu untersuchen und zu überarbeiten.
Tracealayzer hält mehrere Ansichten bereit, die über die Timing-Eigenschaften der Threads Auskunft geben. Darin steht jeder Datenpunkt für eine Instanz (Ausführung) des Threads. Auf der Y-Achse wird dabei stets ein bestimmtes Timingmerkmal aufgetragen, wie etwa die Verarbeitungszeit, die Antwortzeit oder die Periodizität (Intervall zwischen den Aktivierungen). Letztere ist besonders nützlich, wenn es um die Analyse periodischer Aktivitäten geht. Wird die periodische Ausführung von Threads an irgendeiner Stelle verzögert, ist dies in dieser Darstellung deutlich zu sehen. Ebenso wie für die anderen Ansichten gilt auch für das Periodizitätsdiagramm, dass auf einen Doppelklick auf einen Datenpunkt hin die Haupt-Trace-Ansicht synchronisiert wird, sodass Entwickler die Ursache der Verzögerung analysieren können.
Periodische Threads, die mit ähnlicher Rate ausgeführt werden, können beim Scheduling häufig kollidieren. Sie starten dabei gleichzeitig und konkurrieren um die CPU-Zeit, obwohl das System zu anderen Zeiten genügend freie Kapazität hätte. Dies führt zu unnötigen Kontextwechseln und zögert die Beendigung der kollidierenden Threads hinaus. In diesen Fällen können bereits kleine Änderungen am Timing große Verbesserungen der Performance bewirken. Mit Tracealayzer können Entwickler solche Optimierungsmöglichkeiten leichter ausfindig machen, indem sie beispielsweise das »Response Interference«-Diagramm untersuchen. Dieses stellt die Antwortzeit normiert bezogen auf die Verarbeitungszeit dar. Wenn ein Thread beispielsweise 300 µs für seine Ausführung benötigt, dabei aber nur 100 µs CPU-Zeit beansprucht, beträgt die Response-Interference 200%. Stellt sich heraus, dass mehrere Threads zu ähnlichen Zeiten häufig Spitzen in der Response-Interference aufweisen, sollten Entwickler dies näher betrachten. Kann die Verarbeitung periodischer Threads verschoben werden, lässt sich hierdurch die Kollisionshäufigkeit verringern, was wiederum der Leistungsfähigkeit zugutekommt.
Über den Autor:
Dr. Johan Kraft ist Gründer und CEO von Percepio.