Before OProfile can be run, it must be configured. At a minimum,
selecting to monitor the kernel (or selecting not to monitor the kernel)
is required. The following sections describe how to use the
opcontrol utility to configure OProfile. As the
opcontrol commands are executed, the setup options
are saved to the /root/.oprofile/daemonrc file.
First, configure whether OProfile should monitor the kernel. This is
the only configuration option that is required before starting
OProfile. All others are optional.
To monitor the kernel, execute the following command as root:
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux |
| Note |
---|
| The debuginfo package must be installed (which
contains the uncompressed kernel) in order to monitor the kernel.
|
To configure OProfile not to monitor the kernel, execute the following
command as root:
opcontrol --setup --no-vmlinux |
This command also loads the oprofile
kernel module, if it is not already loaded, and creates the
/dev/oprofile/ directory, if it does not already
exist. Refer to Section 41.6 Understanding /dev/oprofile/ for details
about this directory.
| Note |
---|
| Even if OProfile is configured not to profile the kernel, the SMP
kernel still must be running so that the oprofile
module can be loaded from it.
|
Setting whether samples should be collected within the kernel only
changes what data is collected, not how or where the collected data is
stored. To generate different sample files for the kernel and
application libraries, refer to Section 41.2.3 Separating Kernel and User-space Profiles.
Most processors contain counters, which are
used by OProfile to monitor specific events. As shown in Table 41-2, the number of counters available
depends on the processor.
Processor | cpu_type | Number of Counters |
---|
Pentium Pro | i386/ppro | 2 |
Pentium II | i386/pii | 2 |
Pentium III | i386/piii | 2 |
Pentium 4 (non-hyper-threaded) | i386/p4 | 8 |
Pentium 4 (hyper-threaded) | i386/p4-ht | 4 |
Athlon | i386/athlon | 4 |
AMD64 | x86-64/hammer | 4 |
Itanium | ia64/itanium | 4 |
Itanium 2 | ia64/itanium2 | 4 |
TIMER_INT | timer | 1 |
IBM eServer iSeries and pSeries | timer | 1 |
| ppc64/power4 | 8 |
| ppc64/power5 | 6 |
| ppc64/970 | 8 |
IBM eServer S/390 and S/390x | timer | 1 |
IBM eServer zSeries | timer | 1 |
Table 41-2. OProfile Processors and Counters
Use Table 41-2 to verify that the correct
processor type was detected and to determine the number of events that
can be monitored
simultaneously. timer is used as the
processor type if the processor does not have supported performance
monitoring hardware.
If timer is used, events cannot
be set for any processor because the hardware does not have support
for hardware performance counters. Instead, the timer interrupt is
used for profiling.
If timer is not used as the processor
type, the events monitored can be changed, and counter 0 for the
processor is set to a time-based event by default. If more than one
counter exists on the processor, the counters other than counter 0 are
not set to an event by default. The default events monitored are shown
in Table 41-3.
Processor | Default Event for Counter | Description |
---|
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64 | CPU_CLK_UNHALTED | The processor's clock is not halted |
Pentium 4 (HT and non-HT) | GLOBAL_POWER_EVENTS | The time during which the processor is not stopped |
Itanium 2 | CPU_CYCLES | CPU Cycles |
TIMER_INT | (none) | Sample for each timer interrupt |
ppc64/power4 | CYCLES | Processor Cycles |
ppc64/power5 | CYCLES | Processor Cycles |
ppc64/970 | CYCLES | Processor Cycles |
Table 41-3. Default Events
The number of events that can be monitored at one time is determined
by the number of counters for the processor. However, it is not a
one-to-one correlation; on some processors, certain events must be
mapped to specific counters. To determine the number of counters
available, execute the following command:
cat /dev/oprofile/cpu_type |
The events available vary depending on the processor type. To
determine the events available for profiling, execute the following
command as root (the list is specific to the system's processor type):
The events for each counter can be configured via the command line or
with a graphical interface. For more information on the graphical
interface, refer to Section 41.8 Graphical Interface. If the counter
cannot be set to a specific event, an error message is displayed.
To set the event for each configurable counter via the command line, use
opcontrol:
opcontrol --event=<event-name>:<sample-rate> |
Replace <event-name>
with the exact name of the event from op_help, and
replace <sample-rate> with the number
of events between samples.
By default, a time-based event set is selected. It creates a sample
every 100,000 clock cycles per processor. If the timer interrupt is
used, the timer is set to whatever the jiffy rate is and is not
user-settable. If the cpu_type is
not timer, each event can have a
sampling rate set for it. The sampling rate
is the number of events between each sample snapshot.
When setting the event for the counter, a sample rate can also be
specified:
opcontrol --event=<event-name>:<sample-rate> |
Replace <sample-rate> with the
number of events to wait before sampling again. The smaller the
count, the more frequent the samples. For events that do not happen
frequently, a lower count may be needed to capture the event
instances.
| Caution |
---|
| Be extremely careful when setting sampling rates. Sampling too
frequently can overload the system, causing the system to appear
as if it is frozen or causing the system to actually freeze.
|
If the cpu_type is not
timer, unit
masks may also be required to further define the event.
Unit masks for each event are listed with the
op_help command. The values for each unit mask
are listed in hexadecimal format. To specify more than one unit
mask, the hexadecimal values must be combined using a bitwise
or operation.
opcontrol --event=<event-name>:<sample-rate>:<unit-mask> |
By default, kernel mode and user mode information is gathered for each
event. To configure OProfile not to count events in kernel mode for a
specific counter, execute the following command:
opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:0 |
Execute the following command to start profiling kernel mode for the
counter again:
opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:1 |
To configure OProfile not to count events in user mode for a specific
counter, execute the following command:
opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:0 |
Execute the following command to start profiling user mode for the
counter again:
opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:1 |
When the OProfile daemon writes the profile data to sample files, it
can separate the kernel and library profile data into separate sample
files. To configure how the daemon writes to sample files, execute the
following command as root:
opcontrol --separate=<choice> |
<choice> can be one of the following:
none — do not separate
the profiles (default)
library — generate per-application
profiles for libraries
kernel — generate per-application
profiles for the kernel and kernel modules
all — generate per-application
profiles for libraries and per-application profiles for the kernel
and kernel modules
If --separate=library is used, the sample file name
includes the name of the executable as well as the name of the
library.