43.2. Konfiguration von OProfile

Bevor OProfile ausgeführt werden kann, muss es konfiguriert werden. Es muss zumindest gewählt werden, ob der Kernel beobachtet werden soll (oder ob er nicht beobachtet werden soll). Die folgenden Abschnitte beschreiben, wie die opcontrol Utility verwendet wird, um OProfile zu konfigurieren. Beim Ausführen der opcontrolBefehle werden die Setup-Optionen in der /root/.oprofile/daemonrc Datei gespeichert.

43.2.1. Bestimmung des Kernels

Stellen Sie zuerst ein, ob OProfile den Kernel beobachten soll. Das ist die einzige Konfigurationsoption, die nötig ist, um OProfile zu starten. Alle anderen Einstellungen sind fakultativ.

Um den Kernel zu beobachten, führen Sie folgenden Befehl als Root aus:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

Um einzustellen, dass OProfile den Kernel nicht beobachten soll, führen Sie den folgenden Befehl als Root aus:

opcontrol --no-vmlinux

Dieser Befehl lädt auch das oprofile Kernel-Module (wenn es noch nicht geladen wurde) and erstellt das /dev/oprofile/ Verzeichnis, wenn es noch nicht existiert. Für Details über dieses Verezichnis siehe Abschnitt 43.6 .

AnmerkungAnmerkung
 

Auch wenn OProfile nicht so konfiguriert ist, dass es ein Profil des Kernels erstellt, muss der SMP-Kernel trotzdem ausgeführt sein, damit das oprofile Modul geladen werden kann.

Die Einstellung, ob Proben innerhalb des Kernels gesammelt werden sollen, bezieht sich darauf, welche Daten gesammelt werden, nicht wie oder wo die gesammelten Daten gespeichert werden. Um unterschiedliche Probedateien für den Kernel und die Anwendungsbibliotheken zu erstellen, siehe Abschnitt 43.2.3.

43.2.2. Einstellung der zu beobachtenden Ereignisse

Die meisten Prozessoren enthalten counters (Zähler), die von OProfile verwendet werden, um bestimmte Ereignisse zu beobachten. Wie in Tabelle 43-2 gezeigt wird, hängt die Anzahl der verfügbaren Zähler vom Prozessor ab

Prozessorcpu_typeAnzahl der Zähler
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (Non-Hyper-Threaded)i386/p48
Pentium 4 (Hyper-Threaded)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTTimer1
IBM eServer iSeriesTimer1
IBM eServer pSeriesTimer1
IBM eServer S/390Timer1
IBM eServer zSeriesTimer1

Tabelle 43-2. OProfile Prozessoren und Zähler

Verwenden Sie Tabelle 43-2 um sicherzustellen, dass der richtige Prozessor-Typ gefunden wurde, und um herauszufinden, wieviele Ereignisse gleichzeitig beobachtet werden können. timer wird verwendet, wenn der Prozessor-Typ keine unterstützte Leistungsbeobachtungs-Hardware hat.

Wenn timer verwendet wird, können für keinen Prozessor Ereignisse eingestellt werden, weil die Hardware keine Unterstützung für Hardware-Leistungszähler hat. Stattdessen wird die Zeituhr (Timer)-Unterbrechung für die Erstellung des Profils verwendet.

Wenn timer nicht als Prozessor-Typ verwendet wird, können die beobachteten Ereignisse verändert werden. Für den Prozessor wird standardmäßig Zähler 0 als ein auf Zeit basierendes Ereignis eingestellt. Wenn mehr als ein Zähler am Prozessor vorhanden ist, werden außer Zähler 0 keine anderen Zähler standardmäßig auf ein Ereignis eingestellt. Die standardmäßig beobachteten Ereignisse werden in Tabelle 43-3 angezeigt.

ProzessorStandard-Ereignis für Zähler 0Beschreibung
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDDie Uhr des Prozessors wird nicht angehalten
Pentium 4 (HT und nicht-HT), Intel® EM64TGLOBAL_POWER_EVENTSDie Zeit, in der der Prozessor nicht gestoppt wird.
Itanium 2CPU_CYCLESCPU Cycles
TIMER_INT(keine)Probe für jede Zeituhr-Unterbrechung

Tabelle 43-3. Standard-Ereignisse

Die Anzahl der Ereignisse, die zugleich beobachtet werden können, wird durch die Anzahl der Zähler für den Prozessor bestimmt. Allerdings ist dies keine direkte Beziehung. Bei manchen Prozessoren müssen gewisse Ereignisse zu bestimmten Zählern vorgezeichnet werden.

cat /dev/oprofile/cpu_type

Die verfügbaren Ereignisse variieren je nach Typ des Prozessors. Um zu bestimmen, welche Ereignisse zur Profilerstellung verfügbar sind, führen Sie den folgenden Befehl als Root aus (die Liste bezieht sich auf den Prozessor-Typ des Sytems):

op_help

Die Ereignisse für jeden Zähler können über die Befehlszeile oder mit einer grafischen Schnittstelle konfiguriert werden. Wenn der Zähler nicht auf ein bestimmtes Ereignis eingestellt werden kann, wird eine Fehlermeldung angezeigt.

Verwenden Sie opcontrol, um das Ereignis für jeden konfigurierbaren Zähler über die Befehlszeile einzustellen:

opcontrol --ctrlN-event=<event-name>

Ersetzen Sie N mit der Zählernummer (beginnend mit 0), und ersetzen Sie <event-name> mit dem exakten Namen des Ereignisses von op_help.

43.2.2.1. Proberate

Standardmäßig ist eine auf Zeit basierende Ereignisgruppe ausgewählt. Sie erzeugt etwa 2000 Proben pro Sekunde pro Prozessor. Wenn die Zeituhr-Unterbrechung verwendet wird, ist die Zeituhr auf die augenblickliche Rate eingestellt und kann nicht vom Benutzer eingestellt werden. Wenn der cpu_type nicht timer ist, kann jedes Eregnis einesampling rate Einstellung haben. Die Sampling Rate (Proberate) ist Anzahl der Ereignisse zwischen jedem Probe-Schnappschuss.

Wenn das Ereignis für den Zähler eingestellt wird, können Sie auch eine Proberate bestimmen:

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

Ersetzen Sie <sample-rate> mit der Anzahl der Ereignisse, die abgewartet werden sollen, bevor eine neue Probe gezogen wird. Je kleiner die Anzahl, umso öfter die Proben. Für Ereignisse, die nicht oft passieren, muss eine niedrigere Anzahl eingestellt werden, damit die Ereignismomente erfasst werden.

AchtungAchtung
 

Seien Sie extrem vorsichtig, wenn Sie die Proberate einstellen. Zu häufige Proben können das System überladen. Das System reagiert dann wie eingefroren oder es friert tatsächlich ein.

43.2.2.2. Unit-Masken

Wenn der cpu_type nicht timer ist, können unit masks notwendig sein, um das Ereignis näher zu bestimmen.

Unit Masken für jedes Ereignis können mit dem op_help Befehl angezeigt werden. Die Werte für jede Unit-Maske werden in einem hexadezimalen Format angezeigt. Um mehr als eine Unit-Maske zu bestimmen, müssen die hexadezimalen Werte kombiniert werden, indem eine bitmäßige or Operation angewendet wird.

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. Trennung von Kernel- und Benutzerspeicher-Profilen

Standardmäßig wird für jedes Ereignis Information im Kernel- und im Benutzer-Modus eingeholt. Damit OProfile keine Ereignisse für einen bestimmten Zähler im Kernel-Modus zählt, führen Sie eine Konfiguration mit folgendem Befehl aus (wobei N die Zählernummer ist):

opcontrol --ctrN-kernel=0

Führen Sie den folgenden Befehl aus, um für den Zähler wieder Proben im Kernel-Modus zu starten:

opcontrol --ctrN-kernel=1

Damit OProfile keine Ereignisse für einen bestimmten Zähler im Benutzer-Modus zählt, führen Sie den folgenden Befehl aus (wobei N die Zählernummer ist):

opcontrol --ctrN-user=0

Führen Sie den folgenden Befehl aus, um für den Zähler wieder Proben im Benutzer-Modus zu starten:

opcontrol --ctrN-user=1

Wenn der OProfile-Daemon die Profildaten in Probedateien schreibt, kann er die Kernel- und Bibliotheks-Profildaten in jeweils unterschiedliche Probedateien schreiben. Konfigurieren Sie, wie der Daemon die Probedateien schreibt, mit dem folgenden Root- Befehl:

opcontrol --separate=<choice>

<choice> kann eines der folgenden sein:

Wenn --separate=library verwendet wird, enthält der Probedateiname den Namen der ausführbaren Datei und den Namen der Bibliothek.