43.5. Datenanalyse

In regelmäßigen Abständen holt der OProfile Daemon, oprofiled die Proben ein und shreibt sie in das /var/lib/oprofile/samples/ Verzeichnis. Bevor Sie die Daten lesen, stellen Sie sicher, dass alle Daten in dieses Verzeichnis geschrieben worden sind. Führen Sie dazu folgenden Befehl als Root aus:

opcontrol --dump

Der Name jeder Probedateien basiert auf dem Namen der ausführbaren Datei, wobei ein geschwungenes Klammer-zu-Zeichen (}) alle Schrägstriche (/) ersetzt. Der Dateiname endet mit einem Rautezeichen (#), gefolgt von der Nummer des Zählers, der für diese Probedatei verwendet wurde. Die folgende Datei enthält z.B. die Probedaten für die ausführbare /sbin/syslogd Datei, die mit Zähler 0 gesammelt wurden.

}sbin}syslogd#0

Zur Profilerstellung der bereits eingeholten Daten stehen folgende Tools zur Verfügung:

Verwenden Sie diese Tools gemeinsam mit den Binärdateien, für die Profile erstellt wurden, um Berichte zu erstellen, die noch weiter analysiert werden können.

WarnungWarnung
 

Die ausführbare Datei, für die ein Profil erstellt wird, muss mit diesen Tools zur Datenanalyse verwendet werden. Wenn die Datei sich verändern muss, nachdem die Daten eingeholt wurden, sichern Sie die verwendete ausführbare Datei und auch die Probedateien.

Proben für jede ausführbare Datei werden in eine einzige Probedatei geschrieben. Proben von jeder dynamisch verbundenen Bibliothek werden auch in eine einzige Probedatei geschrieben. Wenn die ausführbare Datei, die beobachtet wird, sich verändert, während OProfile läuft, und wenn eine Probedatei für diese ausführbare Datei existiert, dann wird diese existierende Probedatei automatisch gelöscht. Deswegen muss die existierende Probedatei gesichert werden, wenn sie gebraucht wird, gemeinsam mit der verwendeten ausführbaren Datei, mit der die Probedatei erstellt wurde, bevor die ausführbare Datei mit einer neuen Version ersetzt wird. Details über das Sichern von Probedateien finden Sie unterAbschnitt 43.4.

43.5.1. Die Verwendung von op_time

Das op_time Tool bietet eine Übersicht über alle ausführbaren Dateien, für die gerade ein Profil erstellt wird.

Dies ist Teil einer Beispiels-Ausgabe:

581        0.2949  0.0000 /usr/bin/oprofiled
966        0.4904  0.0000 /usr/sbin/cupsd
1028       0.5218  0.0000 /usr/sbin/irqbalance
1187       0.6026  0.0000 /bin/bash
1480       0.7513  0.0000 /usr/bin/slocate
2039       1.0351  0.0000 /usr/lib/rpm/rpmq
6249       3.1722  0.0000 /usr/X11R6/bin/XFree86
8842       4.4885  0.0000 /bin/sed
31342     15.9103  0.0000 /usr/bin/gdmgreeter
58283     29.5865  0.0000 /no-vmlinux
82853     42.0591  0.0000 /usr/bin/perl

Jede ausführbare Datei ist auf einer eigenen Zeile aufgelistet.Die erste Spalte zeigt die Anzahl der Proben, die für die ausführbare Datei aufgezeichnet wurden. Die zweite Spalte zeigt den Prozentsatz der Proben in Relation zu der Gesamtanzahl der Proben. Die dritte Spalte ist ungenützt und die vierte Spalte zeigt den Name der ausführbaren Datei.

Siehe op_time man Seite für eine Liste der verfügbaren Optionen für die Befehlszeile, z.B. die -r Option, die verwendet wird,um die Ausgabe von der ausführbaren Datei mit der größten Anzahl von Proben bis zu jener mit der kleinsten Anzahl von Proben zu sortieren. Die -c Option ist auch nützlich, um eine Zählernummer zu bestimmen.

43.5.2. Die Verwendung von oprofpp

Um mehr detaillierte Information über eine bestimmte ausführbare Datei zu erhalten, verwenden Sie oprofpp:

oprofpp <mode> <executable>

<executable> muss den vollen Pfad zu der ausführbaren Datei erhalten, die analysiert werden soll. <mode> muss eines der folgenden sein:

-l

Probedaten anhand von Symbolen auflisten. Dies ist z.B. Teil der Ausgabe,wenn der Befehl oprofpp -l /usr/X11R6/bin/XFree86 ausgeführt wird:

vma      samples  %           symbol name
...
08195d10 4        3.0303      miComputeCompositeClip
080b9180 5        3.78788     Dispatch
080cdce0 5        3.78788     FreeResource
080ce4a0 5        3.78788     LegalNewID
080ce640 5        3.78788     SecurityLookupIDByClass
080dd470 9        6.81818     WaitForSomething
080e1360 12       9.09091     StandardReadRequestFromClient
...

Die erste Spalte zeigt die virtuelle Speicheradresse (vma) zu Beginn. Die zweite Spalte zeigt die Anzahl der Proben für das Symbol. Die dritte Spalte zeigt den Prozentsatz der Proben für dieses Symbol in Relation zu den gesamten Proben für die ausführbare Datei, und die vierte Spalte ist der Name des Symbols.

Um die Ausgabe von der größten Anzahl der Proben zu der kleinsten zu sortieren (verkehrte Reihenfolge), verwenden Sie -r in Verbindung mit der -l Option.

-s <symbol-name>

Probedaten spezifisch zu einem Symbolnamen auflisten. Diese Ausgabe ist zum Beispiel von dem Befehl oprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86:

vma      samples  %           symbol name
080e1360 12       100         StandardReadRequestFromClient
080e1360 1        8.33333
080e137f 1        8.33333
080e13bb 1        8.33333
080e13f4 1        8.33333
080e13fb 1        8.33333
080e144a 1        8.33333
080e15aa 1        8.33333
080e1668 1        8.33333
080e1803 1        8.33333
080e1873 1        8.33333
080e190a 2        16.6667

Die erste Line ist eine Zusammenfassung für die Kombination Symbol/ausführbare Datei.

Die erste Spalte besteht aus den virtuellen Speicheradressen, für die Proben erstellt wurden. Die zweite Spalte zeigt die Anzahl von Proben für die Speicheradresse. Die dritte Spalte ist der Prozentsatz von Proben für die Speicheradresse in Relation zu der Gesamtanzahl der Proben für das Symbol.

-L

Auflisten von Probedaten nach Symbolen mit mehr Details als -l. Zum Beispiel:

vma      samples  %           symbol name
08083630 2        1.51515     xf86Wakeup
 08083641 1        50
 080836a1 1        50
080b8150 1        0.757576    Ones
 080b8179 1        100
080b8fb0 2        1.51515     FlushClientCaches
 080b8fb9 1        50
 080b8fba 1        50
...

Die Daten sind die gleichen wie bei der -l Option, außer dass für jedes Symbol jede verwendete virtuelle Speicheradresse gezeigt wird. Für jede virtuelle Speicheradresse wird die Nummer der Proben sowie der Prozentsatz der Proben in Relation zu der Anzahl der Proben für das Symbol gezeigt.

-g <file-name>

Eine Ausgabe in eine Datei in gprof Format erzeugen. Wenn die erzeugte Datei gmon.outgenannt wird, kann gprof verwendet werden,um die Daten weiter zu analysieren. Siehe gprof man Seite für weitere Details.

Andere Optionen, um die Daten weiter zu beschränken, sind wie folgt

-f <file-name>

Verwenden Sie die spezifizierte Probedatei <file-name>. Standardmäßig wird die Probedatei in /var/lib/oprofile/samples/ verwendet. Verwenden Sie diese Option, um eine Probedatei von einem früheren Durchlauf festzulegen.

-i <file-name>

Verwenden Sie <file-name> als Namen für die ausführbare Datei, für die Daten eingeholt werden sollen.

-d

"Demangle" C++ Symbol-Namen.

-D

"Demangle" C++ Symbol-Namen und Vereinfachung der "demangled" Namen der STL-Bibliotheken.

--counter <number>

Informationen von einem festgelegten Zähler einholen. Der standardmäßige Zähler ist 0 wenn nicht anders festgelegt.

-o

Die Zeilennummer im Quellcode für jede Probe anzeigen. Beim Erstellen der ausführbaren Datei hätte die GCC's -g Option verwendet werden sollen. Andernfalls kann diese Option die Zeilennummern nicht anzeigen. Keine der Red Hat Enterprise Linux ausführbaren Dateien können standardmäßig mit dieser Option erstellt werden.

vma      samples  %      symbol name        linear info
0806cbb0 0        0      _start             ../sysdeps/i386/elf/start.S:47
-e <symbol-name>

Schließen Sie die Liste der Komma-getrennten Symbole von der Ausgabe aus.

-k

Eine zusätzliche Spalte anzeigen, die die gemeinsame Bibliothek enthält. Diese Option bringt nur Resultate, wenn der --separate=library option to opcontrol Befehl beim Konfigurieren von OProfile festgelegt wird und wenn die --dump-gprof-file Option nicht in Verbindung mit dieser Option verwendet wird.

-t <format>

Die Ausgabe in einer festgelegten Spaltenfolge anzeigen. Diese Option kann nicht mit -g verwendet werden.

Verwenden Sie die folgenden Buchstaben, um die Spalten darzustellen:

BuchstabeBeschreibung
vVirtuelle Speicheradresse
sAnzahl der Proben
SAnwachsende Anzahl der Proben
pProzentsatz der Proben in Relation zu der Gesamtanzahl von Proben für die ausführbare Datei
PAnwachsender Prozentsatz der Proben in Relation zu der Gesamtanzahl der Proben für die ausführbare Datei
qProzentsatz der Proben in Relation zu allen ausführbaren Dateien, für die Proben erstellt wurden.
QAnwachsender Prozentsatz der Proben in Relation zu allen ausführbaren Dateien, für die Proben erstellt wurden
nSymbolname
lDateiname oder Quelldatei und Zeilennummer samt vollem Pfad
LBasisname des Quellcode-Dateinamens und Zeilennummer
iName der ausführbaren Datei samt vollem Pfad
IBasisname der ausführbaren Datei
dDetails der Probe
hKopfzeilen der Spalten anzeigen

Tabelle 43-4. Buchstaben für Spaltenfolge

--session <name>

Den vollen Pfad zum Ablauf festlegen oder ein Verzeichnis bezüglich des /var/lib/oprofile/samples/ Verzeichnisses festlegen

-p <path-list>

Eine Liste von Komma-getrennten Pfaden festlegen, in der sich die ausführbaren Dateien befinden, die analysiert werden sollen.

43.5.3. Using op_to_source

Das op_to_source Tool versucht, die Proben für bestimmte Instruktionen mit den dazugehörigen Zeilen im Quellcode zu vergleichen. Die sich ergebenden Dateien sollten die Proben in den Zeilen auf der linken Seite haben. Dies setzt auch einen Kommentar an den Beginn jeder Funktion, indem die Gesamtproben für die Funktion aufgelistet werden.

Damit diese Utility funktioniert, müssen die ausführbaren Dateien mit der GCC's -g Option erstellt werden. Standardmäßig werden Red Hat Enterprise Linux Pakete nicht mit dieser Option erstellt.

Die Generalsyntax für op_to_source lautet:

op_to_source --source-dir <src-dir> <executable>

Das Verzeichnis, in dem sich der Quellcode und die ausführbare Datei befinden, die analysiert werden sollen, muss festgelegt werden. Siehe op_to_source man-Seite für eine Liste zusätzlicher Optionen für die Befehlszeile.

43.5.4. Verwendung von op_merge

Wenn für die exakt gleiche ausführbare Datei oder Bibliothek mehrere Probedateien existieren, können die Probedateien für eine leichtere Analyse zusammengeführt werden.

Um z.B. Dateien für die Bibliothek /usr/lib/library-1.2.3.so zusammenzuführen, führen Sie den folgenden Befehl als Root aus:

op_merge /usr/lib/library-1.2.3.so

Die resultierende Datei ist /var/lib/oprofile/samples/}usr}lib}library-1.2.3.so.

Um die Proben, die zu einem bestimmten Zähler zusammengeführt werden, zu begrenzen, verwenden Sie die -c Option, gefolgt von der Zählernummer.