编程接口指南

缓冲区操作

利用以下例程,可以访问 cpc_buf_t 结构中的数据。

int cpc_buf_get(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val);

int cpc_buf_set(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val);

hrtime_t cpc_buf_hrtime(cpc_t *cpc, cpc_buf_t *buf);

uint64_t cpc_buf_tick(cpc_t *cpc, cpc_buf_t *buf);

int cpc_buf_sub(cpc_t *cpc, cpc_buf_t *result, cpc_buf_t *left

      cpc_buf_t *right);

int cpc_buf_add(cpc_t *cpc, cpc_buf_t *result, cpc_buf_t *left,

      cpc_buf_t *right);

int cpc_buf_copy(cpc_t *cpc, cpc_buf_t *dest, cpc_buf_t *src);

void cpc_buf_zero(cpc_t *cpc, cpc_buf_t *buf);

cpc_buf_get() 函数可检索 index 参数所标识的计数器的值。index 参数是指在绑定集之前由 cpc_set_add_request() 函数返回的值。cpc_buf_get() 函数可将计数器的值存储在 val 参数所指示的位置。

cpc_buf_set() 函数可设置 index 参数所标识的计数器的值。index 参数是指在绑定集之前由 cpc_set_add_request() 函数返回的值。cpc_buf_set() 函数可将计数器的值设置为位于 val 参数所指示的位置的值。cpc_buf_get() 函数和 cpc_buf_set() 函数均不会更改对应的 CPC 请求的预设值。

cpc_buf_hrtime() 函数可返回高精度时间标记,用于指示对硬件进行抽样的时间。cpc_buf_tick() 函数可返回 LWP 运行时已经过的 CPU 时钟周期的数量。

cpc_buf_sub() 函数可计算在 leftright 参数中指定的计数器与周期值之间的差值。cpc_buf_sub() 函数可将结果存储在 result 中。cpc_buf_sub() 函数的给定调用必须确保所有 cpc_buf_t 值都源自同一 cpc_set_t 结构。result 索引包含缓冲区中每个请求索引的 left - right 计算的结果。结果索引还包含 tick 的差。cpc_buf_sub() 函数可用于将目标缓冲区的高精度时间标记设置为 leftright 缓冲区的最新时间。

cpc_buf_add() 函数可计算在 leftright 参数中指定的计数器和周期值的总和。cpc_buf_add() 函数可将结果存储在 result 中。cpc_buf_add() 函数的给定调用必须确保所有 cpc_buf_t 值都源自同一 cpc_set_t 结构。result 索引包含缓冲区中每个请求索引的 left + right 计算的结果。结果索引还包含 tick 的总和。cpc_buf_add() 函数可用于将目标缓冲区的高精度时间标记设置为 leftright 缓冲区的最新时间。

使用 cpc_buf_copy() 函数时 destsrc 相同。

cpc_buf_zero() 函数可将 buf 中的所有内容都设置为零。