LTTng-Bibliothek in Verbindung mit einem Trace-Tool

Der Einsatz der open-source verfügbaren LTTng-Bibliothek in Verbindung mit einem Trace-Tool kann bei der Evaluierung eines kundenspezifischen Linux-Kernels etwaige Performance-Probleme aufdecken. (Bild: Percepio)

Exemplarisch lässt sich dies an der Entwicklung eines Linux-Treibers zur Entgegennahme von Daten demonstrieren, die von einem externen Gerät gestreamt werden. Zwar enthält der Linux-Kernel native Mechanismen, um sicherzustellen, dass der Treiber korrekt funktioniert, aber das Debugging und das Evaluieren der Performance ist alles andere als trivial. Hier lohnt sich ein Blick auf neue Trace-Tools, die Support für Embedded Linux bieten. Kann beispielsweise Tracealyzer gute Dienste leisten – sowohl bei der Analyse von Treibern und Interrupt-Handlern als auch bei der Untersuchung der Userspace-Applikationen und der Compiler-Optionen?

Trace-Tool mit einer auf Yocto basierenden Linux-Distribution

Klären lässt sich diese Frage, indem man das Trace-Tool mit einer auf Yocto basierenden Linux-Distribution nutzt, wobei zunächst ein individueller Layer auf einem Board-Support-Package erstellt wird, um die open-source verfügbare LTTng-Bibliothek nutzen zu können. Hierdurch stehen mehrere hilfreiche Optionen für die Ausführung des Treibers als Bestandteil des Linux-Systems, einschließlich des Kernels, zur Verfügung. Außerdem wird eine ganzheitlichere Sicht auf den Treiber geboten, um die Ursachen möglicher Engpässe zu finden oder sicherzustellen, dass Engpässe gar nicht erst entstehen.

Ein zu Diagnosezwecken dienendes Trace-Tool kann auch beim Aufdecken von Performance-Problemen im IRQ-Handler helfen, ohne dass auf die ungeliebte printk-Anweisung zurückgegriffen werden muss. So könnte es zum Beispiel notwendig werden, den Device-Interrupt über den I2C-Bus zu bestätigen, um ein Thrashing zu verhindern. Ohne das Trace-Tool hätte man diesen Bug überhaupt nicht oder erst kurz vor dem Release-Datum beim Entfernen der externen printk-Aufrufe entdeckt. Deutlich werden mit dem Tool auch die gravierenden Auswirkungen, die das Einbinden von printk-Anweisungen in einen Interrupt-Handler hat. Mit dem Einsatz des Trace-Tools werden Modifikationen am Treiber in einer späten Phase vermieden, die zu deutlichen Verzögerungen und Mehrkosten führen können.

Best-Effort-Algorithmus des Linux-Kernels

Mithilfe des Trace-Tools lässt sich ferner überprüfen, wie sich das Festlegen der CPU-Affinität auf die Leistungsfähigkeit eines Prozesses auswirkt. Eine Analyse der Wechselwirkungen zwischen den verschiedenen Verarbeitungselementen – sowohl unter normalen Bedingungen als auch bei Belastung – lässt den Best-Effort-Algorithmus des Linux-Kernels erkennen und es wird deutlich, welche Bereiche des Schedulers im Linux-Kernel und der iperf-Codebasis genauer zu untersuchen sind.

Noch besser können Trace-Tools ihre Leistung ausspielen, wenn die Performance von Userspace-Applikationen evaluiert werden soll. Indem die Ausgabe des Trace-Tools mit LTTng-Tracepoints zusammengeführt wird, erhält man eine wertvolle Möglichkeit, die Performance der Applikation zu ermitteln, etwaige Fälle abnormalen Verhaltens aufzudecken und eine abstrakte Timing-Statistik einzuholen. Anschließend kann das Tool zur Behebung etwaiger Timing-Probleme und zur Verbesserung der Applikations-Performance genutzt werden.

Vertikale Trace-Darstellung
Diese vertikale Trace-Darstellung zeigt den Ablauf der Ereignisse an einer vertikalen Zeitachse. Jede Spalte gibt einen bestimmten Verarbeitungskontext im System – meist eine Task oder ein Interrupt-Handler – wieder. Rechtecke in einer Spalte zeigen an, wann eine bestimmte Task aktiv war, und die horizontalen Labels links markieren aufgezeichnete Software-Ereignisse. Die Darstellung ist interaktiv: Je weiter man sich also in die Grafik hineinzoomt, umso mehr Details werden sichtbar. (Bild: Percepio)

Mit der Kombination aus Trace-Tool und LTTng-Bibliothek lässt sich ebenfalls schneller verstehen, wie sich bestimmte Compiler-Optionen auf die Leistungsfähigkeit von Userspace-Applikationen auswirken, die Gleitkomma-Berechnungen ausführen. Meist werden derartige Analysen erst nachträglich (und mit erheblichem Zeitaufwand) vorgenommen, wenn die Performance der Applikation hinter den Erwartungen zurückbleibt. Besser ist es, das Tool bereits während der Entwicklung zum Verifizieren des Software-Timings einzusetzen.

Mit Trace-Tools Leistungsfähigkeit von Embedded-Linux-Systemen optimieren

Insgesamt können Trace-Tools wie Tracealyzer überaus hilfreich sein, um verborgene Fehler zu entdecken und die Leistungsfähigkeit von Embedded-Linux-Systemen zu optimieren. Ausgehend von abstrakten Übersichtsdarstellungen lassen sich genauere Analysen vornehmen, die beispielsweise Prozess-Interaktionen, das Verzweigen von Prozessen, die Auslastung der CPU-, RAM- und I/O-Ressourcen, die Dateinutzung, Zustandsautomaten und anwenderdefinierte Metriken näher beleuchten. Dabei werden aussagefähige, intuitive Trace-Ansichten mit den nötigen Details erzeugt.

Mithilfe einer individualisierbaren Ereignis-Interpretation erfolgt eine Anpassung an bestimmte Anwendungsfälle, und es lassen sich so benutzerdefinierte Datensätze, wie etwa Intervalle und Zustandsautomaten, mit weitreichend konfigurierbaren Ansichten darstellen. Die quelloffene LTTng-Bibliothek bietet hier zusätzlich eine Fülle von Möglichkeiten zur Erkundung der unterschiedlichsten Aspekte eines Embedded-Linux-Designs – von den Treibern und Interrupt-Handlern bis zu den Userspace-Applikationen und Compiler-Optionen. Der Einsatz einer solchen Kombination schon während des Entwicklungsprozesses sorgt für mehr Transparenz, und ermöglicht auch eine frühzeitigere Problembehebung. Dies führt dazu, dass sich verborgene Bugs gar nicht erst einschleichen und spart im weiteren Verlauf eines Projekts sowohl Kosten als auch Zeit.

Autor

Autor Mohammed Billoo

Mohammed Billoo ist Gründer von MAB Labs

Sie möchten gerne weiterlesen?

Unternehmen

Percepio AB

Stansargränd 4
721 30 Västerås
Sweden