Linux Man Page Viewer
The following form allows you to view linux man pages.
The libpfm library is a helper library which can be called by applica-
tions using the kernel perfmonctl() system call to program the perfor-
mance monitoring unit (PMU) of IA-64 CPUs.
The kernel perfmon subsystem exports a simple interface which allows
basic reading and writing of the PMU registers. There are two cate-
gories of PMU registers. The performance monitoring data registers
(PMD) are used to collects counts or serve as hardware buffers. The
performance monitoring control registers (PMCS) are used to indicate
what events need to be monitored. Programming the PMU consists in set-
ting up the PMC registers to monitor certain events. The PMDS are com-
monly set to zero unless sampling is used.
The number of PMC and PMD registers varies from one implementation of
the IA-64 architecture to another. The association of PMC to PMD can
also change. Moreover the number and encoding of events can also widely
change. In addition the structure of a PMC register can also change.
All these factors make it quite difficult to write monitoring tools.
This library is designed to simplify the programming of the PMC regis-
ters by hiding the complexity behind simple interfaces. The library
does this without limiting accessibility to model specific features by
using a layered design.
The library is structured in two layers. The common layer provides an
interface that is shared by all implementations. For instance, getting
an event descriptor using the event name is the same operation on all
IA-64 implementation, even though the returned descriptor and the event
name can vary. This layer is good enough to setup simple monitoring
sessions which count occurrences of simple events. Then there is a
model specific layer which gives access to the model-specific features.
For instance, on Itanium, you can use the library to figure out how to
initialize PMC12 which controls the Branch Trace Buffer. Model specific
interfaces have the abbreviated PMU model name in their names. For
instance, pfm_ita2_get_event_umask() is an Itanium2 (ita2) specific
When the library is initialized, it automatically probes the host CPU
and enables the right set of interfaces. The layered design uses a mod-
ular implementation, where support for each CPU is well separated and
can be compiled in or out of the library.
The common interface is defined in the pfmlib.h header file. The Ita-
nium specific interface is in pfmlib_itanium.h. The pfmlib_itanium2.h
provides the Itanium2 interface.
It is important to realize that the library does not make any kernel
with the library
November, 2002 LIBPFM(3)