Table of Contents
The performance counter registers need programming in order to set the type of event to count, etc. OProfile uses a standard model across all CPUs for defining these events as follows :
event
|
The event type e.g. DATA_MEM_REFS |
unit mask
|
The sub-events to count (more detailed specification) |
counter
|
The hardware counter(s) that can count this event |
count
|
The reset value (how many events before an interrupt) |
kernel
|
Whether the counter should increment when in kernel space |
user
|
Whether the counter should increment when in user space |
The term "unit mask" is borrowed from the Intel architectures, and can further specify exactly when a counter is incremented (for example, cache-related events can be restricted to particular state transitions of the cache lines).
All of the available hardware events and their details are specified in
the textual files in the events
directory. The
syntax of these files should be fairly obvious. The user specifies the
names and configuration details of the chosen counters via
opcontrol. These are then written to the kernel
module (in numerical form) via /dev/oprofile/N/
where N is the physical hardware counter (some events can only be used
on specific counters; OProfile hides these details from the user when
possible). On IA64, the perfmon-based interface behaves somewhat
differently, as described later.