int
i386_pmc_info(
struct i386_pmc_info_args *ia
)
int
i386_pmc_startstop(
struct i386_pmc_startstop_args *ssa
)
int
i386_pmc_read(
struct i386_pmc_read_args *ra
)
i386_pmc_info()
will return information about the available CPU counters.
The information is returned in
ia
having the following structure:
struct i386_pmc_info_args {
int type;
int flags;
};
The type member describes the class of performance counters available. Valid values are:
The flags member describes additional capabilities of the processor. Valid values are:
i386_pmc_startstop()
is used to start and stop the measurement of the CPU performance counters.
The argument
ssa
has the following structure:
struct i386_pmc_startstop_args {
int counter;
uint64_t val;
uint8_t event;
uint8_t unit;
uint8_t compare;
uint8_t flags;
};
The counter specified by the member counter is started if the member flags has PMC_SETUP_KERNEL or PMC_SETUP_USER set, otherwise the counter is stopped. The initial value of the counter is set to val. Additional values for the flags member are PMC_SETUP_EDGE and PMC_SETUP_INV. The event member specifies some event written to the control register. The unit member specifies the measurement units. The compare member is a mask for the counter.
i386_pmc_read()
will return information about a specific CPU counter measured during
the last measurement period determined by the calling of
i386_pmc_startstop(
).
The information is returned in
ra
having the following structure:
struct i386_pmc_read_args {
int counter;
uint64_t val;
uint64_t time;
};
The counter to read should be specified by the
counter
member.
Counters are numbered from 0 to
PMC_NCOUNTERS
.
The value of the counter is returned in the
val
member.
The time since epoch, measured in CPU clock cycles, is returned in the
time
member.