编程接口指南

配置接口

cpc_set_t *cpc_set_create(cpc_t *cpc);

int cpc_set_destroy(cpc_t *cpc, cpc_set_t *set);

int cpc_set_add_request(cpc_t *cpc, cpc_set_t *set, const char *event,

          uint64_t preset, uint_t flags, uint_t nattrs,

          const cpc_attr_t *attrs);

int cpc_set_request_preset(cpc_t *cpc, cpc_set_t *set, int index,

          uint64_t preset);

不透明数据类型 cpc_set_t 表示请求的集合。这些集合称为集。cpc_set_create() 函数可用于创建空集。cpc_set_destroy() 函数可销毁一个集,并释放该集使用的所有内存。销毁集将释放该集使用的硬件资源。

cpc_set_add_request() 函数可用于向集中添加请求。以下列出了请求的参数。

event

用于指定要进行计数的事件的名称的字符串。

preset

用作计数器初始值的 64 位无符号整数。

flags

应用于一组请求标志的逻辑或运算的结果。

nattrs

attrs 指向的数组中的属性个数。

attrs

指向 cpc_attr_t 结构数组的指针。

以下列出了有效的请求标志。

CPC_COUNT_USER

利用此标志,当 CPU 在用户模式下执行时可对出现的事件进行计数。

CPC_COUNT_SYSTEM

利用此标志,当 CPU 在特权模式下执行时可对出现的事件进行计数。

CPC_OVF_NOTIFY_EMT

此标志可请求在硬件计数器溢出时发出通知。

CPC 接口可将属性作为 cpc_attr_t 结构数组来进行传递。

cpc_set_add_request() 函数成功返回时,它将返回一个索引。此索引会引用通过调用 cpc_set_add_request() 函数时添加的请求所生成的数据。

cpc_set_request_preset() 函数可更改请求的预设值。通过更改可将新的预设值与溢出集重新绑定在一起。

cpc_walk_requests() 函数可针对 cpc_set_t 中的每个请求调用用户提供的 action() 例程。arg 参数的值会在未进行解释的情况下传递给用户例程。应用程序使用 cpc_walk_requests() 函数可列显集中每个请求的配置。cpc_walk_requests() 函数的语法如下:

void cpc_walk_requests(cpc_t *cpc, cpc_set_t *set, void *arg,

void (*action)(void *arg, int index, const char *event,

uint64_t preset, uint_t flags, int nattrs,

            const cpc_attr_t *attrs));