Open Source im professionellen Einsatz

© photocase.com

System-Profiling mit Oprofile

Optimierung mit Profil

Das Oprofile-Paket sammelt statistische Laufzeit-Informationen moderner Prozessoren und wertet sie aus. Das erlaubt das Profiling komplexer, interagierender Programme und Bibliotheken und ermöglicht somit eine Analyse des gesamten Systemverhaltens.

Die Zeiten, in denen ein Entwickler allein durch das Lesen von Quellcode alle Performance-Engpässe in seinem Programm aufspüren konnte, sind vorbei. Heutige Programme sind oft sehr komplex, weshalb er bei der Optimierung auf genaue Messwerte aus dem Einsatz in der realen Welt zurückgreifen muss, falls er Modifikationen vornehmen will, die signifikante Performance-Verbesserungen bringen. Die üblicherweise stattfindende Kooperation von Programmen mit mehreren Threads, die eventuell noch in einer Mehrprozessorumgebung laufen, erschwert die Analyse erheblich und verlangt nach neuen Lösungen.

CPU zählt mit

Oprofile bietet die Möglichkeit, bei bestimmten Ereignissen bis zu mehrere tausend Mal pro Sekunde spezifische Systemzustände zu protokollieren. Im einfachsten Fall stammen diese Events vom Instruction Pointer der CPU. Damit kann der Entwickler feststellen, welche Programmteile am häufigsten ausgeführt werden, eventuell einen Bottleneck aufspüren und dann für Optimierungen sorgen. Dieses periodische Sampling von Events und Zuständen wird auf Kernel-Ebene entweder durch einen SystemTimer realisiert oder - wesentlich effizienter - durch so genannte Performance Counter, die sich in fast allen modernen Prozessoren finden.

Gegenüber klassischen Lösungen, etwa dem speziellen Instrumentieren der Programme durch einen Compiler (zum Beispiel mit »gcc -pg«), hat eine solche Implementierung mehrere Vorteile: Es ist keine erneute Übersetzung der Programme und Bibliotheken aus den Quellcodes nötig und weil auch kein zusätzlicher Instrumenten-Ballast in den Programmen steckt, beeinträchtigt auch kein Messcode den normalen Ablauf. Während des Profilings erhöht sich die Systemlast allerdings zwischen 1 und 10 Prozent. Dieser Wert hängt von der gewählten Sampling-Frequenz und der übrigen Systemauslastung ab.

Die zu untersuchenden Programme benötigen für die reine Performance-Messung nicht einmal Debug-Symbole (»gcc -g«). Um allerdings die ermittelten Messdaten spezifischen Stellen im Quellcode zuordnen zu können, ist das Kompilieren mit Debug-Symbolen sinnvoll. Da eine einzige Instanz das gesamte System, inklusive aufgerufener Programme, Hintergrundprozesse und Kernel protokolliert, kann der Entwickler auch Engpässe erkennen, die sich erst aus dem komplexen Zusammenspiel mehrerer Komponenten ergeben.

Viele CPUs unterstützt

Dank der Unterstützung durch Performance Counter lassen sich detaillierte Daten sogar zu hochgradig systeminternen Aspekten sammeln: L1-, L2, TLB-, Cache-Misses und -Hits, nicht ausgerichtete (misaligned) Referenzen, Pipeline Flush, Pipeline Stall, parallel ausgeführte Instruktionen (Pairing) und je nach Prozessor viele weitere Details. Die Features zur jeweiligen CPU sind der Herstellerreferenz [2] oder den Beschreibungen in »/usr/share/oprofile« zu entnehmen. Oprofile unterstützt nicht nur die 32-Bit-Prozessoren von Intel und AMD, sondern auch Alpha, IA-64, PowerPC, Mips sowie Xscale-ARM-CPUs.

Neben dem Kernelcode zum Erzeugen der Events besteht Oprofile aus einem Userspace-Daemon, der die Daten einsammelt und zur späteren Analyse speichert. Tools zur Analyse der Daten sind im Paket ebenfalls enthalten. Sie können die Ereignisse sowohl einzelnen Assembler-Instruktionen wie auch C- und C++-Code zuordnen und in diesen als Kommentar anfügen. Das Oprofile-Paket enthält außerdem ein grafisches Frontend, das auf dem Qt-Toolkit basiert (Abbildung 1). Programmierer bei Red Hat haben rudimentären Oprofile-Support auch in die Eclipse-IDE integriert [3].

Abbildung 1: Die einfache grafische Oberfläche »oprof_start« lässt den Anwender aus den verfügbaren Event-Masken des Prozessors auswählen.

Abbildung 1: Die einfache grafische Oberfläche »oprof_start« lässt den Anwender aus den verfügbaren Event-Masken des Prozessors auswählen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook