int
pmc_control(
int ctr
, int op
, void *argp
)
int
pmc_get_info(
int ctr
, int op
, void *argp
)
)
returns the number of counters in the system or information on a specified
counter
ctr
.
The possible values for
op
are:
PMC_INFO_NCOUNTERS
ctr
is ignored and
argp
is of type
int
*
.
Upon return, the integer pointed to by
argp
will contain the number of counters that are available in the system.
PMC_INFO_CPUCTR_TYPE
ctr
refers to the counter being queried, and
argp
is of type
int
*
.
Upon return, the integer pointed to by
argp
will contain the implementation-dependent type of the specified counter.
If
ctr
is -1, the integer pointed to by
argp
will contain the machine-dependent type
describing the CPU or counter configuration.
PMC_INFO_COUNTER_VALUE
ctr
refers to the counter being queried, and
argp
is of type
uint64_t
*
.
Upon return, the 64-bit integer pointed to by
argp
will contain the value of the specified counter.
PMC_INFO_ACCUMULATED_COUNTER_VALUE
ctr
refers to the counter being queried, and
argp
is of type
uint64_t
*
.
Upon return, the 64-bit integer pointed to by
argp
will contain the sum of the accumulated values of specified counter in
all exited subprocesses of the current process.
pmc_control()
manipulates the specified counter
ctr
in one of several fashions.
The
op
parameter determines the action taken by the kernel and also the interpretation of the
argp
parameter.
The possible values for
op
are:
PMC_OP_START
ctr
running.
It must be preceded by a call with
PMC_OP_CONFIGURE
.
argp
is ignored in this case and may be
NULL
.
PMC_OP_STOP
ctr
from running.
argp
is ignored in this case and may be
NULL
.
PMC_OP_CONFIGURE
ctr
prior to running.
argp
is a pointer to a
struct
pmc_counter_cfg
.
struct pmc_counter_cfg {
pmc_evid_t event_id;
pmc_ctr_t reset_value;
uint32_t flags;
};
event_id
reset_value
PMC_OP_PROFSTART
,
below).
This value is defined to be the number of counter ticks before
the next overflow.
So, to get a profiling tick on every hundredth data cache miss, set the
event_id
to the proper value for
``dcache-miss''
and set
reset_value
to 100.
flags
PMC_OP_PROFSTART
ctr
for use in profiling.
argp
is a pointer to a
struct
pmc_counter_cfg
as in
PMC_OP_CONFIGURE
,
above.
This request allocates a kernel counter, which will fail if any
process is using the requested counter.
Not all implementations or counters may support this option.
PMC_OP_PROFSTOP
ctr
from being used for profiling.
argp
is ignored in this case and may be
NULL
.
)
and
pmc_get_info(
)
are
EFAULT
]
argp
is invalid.
ENXIO
]
EINPROGRESS
]
PMC_OP_START
was passed for a counter that is already running.
EINVAL
]
EBUSY
]
ENODEV
]
ENOMEM
]
)
and
pmc_get_info(
)
system calls appeared in
NetBSD2.0.