diff options
| author | liuyu <[email protected]> | 2024-06-27 22:35:55 -0400 |
|---|---|---|
| committer | liuyu <[email protected]> | 2024-06-27 22:35:55 -0400 |
| commit | d979f29f85925b721536234768ff5bbde0ab0be5 (patch) | |
| tree | c84ec1d43896a8a213741bae6c0abf405acbf5cf | |
| parent | 9ad6056a7a9779c782de142f1ca0c75619542db5 (diff) | |
创建队列的时候添加参数控制是否统计队列信息
| -rw-r--r-- | bbq/include/bbq.h | 39 | ||||
| -rw-r--r-- | bbq/src/bbq.c | 7 | ||||
| -rw-r--r-- | bbq/tests/common/test_queue.c | 4 |
3 files changed, 32 insertions, 18 deletions
diff --git a/bbq/include/bbq.h b/bbq/include/bbq.h index 7f421f8..dea94c2 100644 --- a/bbq/include/bbq.h +++ b/bbq/include/bbq.h @@ -1,6 +1,6 @@ /* * @Author: [email protected] - * @LastEditTime: 2024-06-27 06:20:30 + * @LastEditTime: 2024-06-27 22:20:18 * @Describe: bbq(Block-based Bounded Queue)头文件 * 参考:https://www.usenix.org/system/files/atc22-wang-jiawei.pdf */ @@ -43,15 +43,18 @@ struct bbq_block { struct bbq { char name[BBQ_SYMBOL_MAX] __BBQ_CACHE_ALIGNED; - int32_t socket_id; // 用于libnuma分配内存,socket_id小于0将使用malloc分配 - uint32_t bn; // blocks的个数 - uint32_t bs; // blocks.entries的个数 - uint32_t flags; // 标记:retry new 模式,还是drop old模式 - uint32_t idx_bits; // bbq_head里idx所占的位数 - uint32_t off_bits; // bbq_cursor里offset所占的位数 - uint64_t idx_mask; // idx_bits偏移后的掩码 - uint64_t off_mask; // off_bits偏移后的掩码 - uint64_t entry_size; // blocks.entries里每个entry的大小 + int32_t socket_id; // 用于libnuma分配内存,socket_id小于0将使用malloc分配 + uint32_t bn; // blocks的个数 + uint32_t bs; // blocks.entries的个数 + uint32_t flags; // 标记:retry new 模式,还是drop old模式 + uint32_t idx_bits; // bbq_head里idx所占的位数 + uint32_t off_bits; // bbq_cursor里offset所占的位数 + uint64_t idx_mask; // idx_bits偏移后的掩码 + uint64_t off_mask; // off_bits偏移后的掩码 + uint64_t entry_size; // blocks.entries里每个entry的大小 + uint64_t pad1; + uint64_t pad2; + struct bbq_atomic64 phead; // 生产者头,指向块的索引,分为两部分:version|idx struct bbq_atomic64 chead; // 消费者头,指向块的索引,分为两部分:version|idx @@ -67,6 +70,8 @@ struct bbq { #define BBQ_F_MP_ENQ BBQ_F_DEFAULT #define BBQ_F_SC_DEQ 0x0008 #define BBQ_F_MC_DEQ BBQ_F_DEFAULT +#define BBQ_F_ENABLE_STAT 0x0010 +#define BBQ_F_DISABLE_STAT BBQ_F_DEFAULT /** * 创建bbq队列,使用当前函数创建的队列,后续操作会把指针入队。 * 对应入队函数:bbq_enqueue、bbq_enqueue_burst @@ -81,11 +86,17 @@ struct bbq { * 当检测到不支持多numa,将转为malloc分配内存。 * @param[in] flags * 设置入队策略: - * - BBQ_F_RETRY_NEW(默认):队列满了当前入队失败。 * - BBQ_F_DROP_OLD:队列满时,覆盖旧数据,入队成功 - * 设置生产者消费者模式: - * - BBQ_F_SP_ENQ:单生产者 BBQ_F_MP_ENQ:多生产者(默认) - * - BBQ_F_SC_DEQ:单消费者 BBQ_F_MC_DEQ:多消费者(默认) + * - BBQ_F_RETRY_NEW:队列满了当前入队失败(默认)。 + * 设置生产者模式: + * - BBQ_F_SP_ENQ:单生产者 + * - BBQ_F_MP_ENQ:多生产者(默认) + * 设置消费者模式: + * - BBQ_F_SC_DEQ:单消费者 + * - BBQ_F_MC_DEQ:多消费者(默认) + * 设置统计功能: + * - BBQ_F_ENABLE_STAT:开启统计功能 + * - BBQ_F_DISABLE_STAT:关闭统计功能(默认) * @return * 非NULL:消息队列结构体指针,用于后续出队入队等操作。 * NULL:创建失败,可通过bbq_errno分析具体错误原因: diff --git a/bbq/src/bbq.c b/bbq/src/bbq.c index 67670f0..5019de1 100644 --- a/bbq/src/bbq.c +++ b/bbq/src/bbq.c @@ -1,6 +1,6 @@ /* * @Author: liuyu - * @LastEditTime: 2024-06-27 21:11:31 + * @LastEditTime: 2024-06-27 22:22:17 * @Email: [email protected] * @Describe: bbq(Block-based Bounded Queue)实现 * 参考:https://www.usenix.org/system/files/atc22-wang-jiawei.pdf @@ -20,6 +20,7 @@ #define BBQ_F_CHK_COPY_VALUE(flags) (flags & BBQ_F_COPY_VALUE) #define BBQ_F_CHK_SP_ENQ(flags) (flags & BBQ_F_SP_ENQ) #define BBQ_F_CHK_SC_DEQ(flags) (flags & BBQ_F_SC_DEQ) +#define BBQ_F_CHK_STAT_ENABLE(flags) (flags & BBQ_F_ENABLE_STAT) // 避免无用参数的编译告警 #define AVOID_WARNING(param) ((void)param) @@ -629,7 +630,7 @@ static struct bbq_status __bbq_enqueue(struct bbq *q, void const *data, uint32_t break; } - if (wait_consumed != NULL) { + if (BBQ_F_CHK_STAT_ENABLE(q->flags) && wait_consumed != NULL) { *wait_consumed = bbq_wait_consumed_set(q, NULL, &ph, blk); } @@ -846,7 +847,7 @@ static struct bbq_status __bbq_dequeue(struct bbq *q, void *deq_data, uint32_t n break; } - if (wait_consumed != NULL) { + if (BBQ_F_CHK_STAT_ENABLE(q->flags) && wait_consumed != NULL) { *wait_consumed = bbq_wait_consumed_set(q, &ch, NULL, blk); } diff --git a/bbq/tests/common/test_queue.c b/bbq/tests/common/test_queue.c index 00c3350..7d51bf3 100644 --- a/bbq/tests/common/test_queue.c +++ b/bbq/tests/common/test_queue.c @@ -1,6 +1,6 @@ /* * @Author: liuyu - * @LastEditTime: 2024-06-27 21:07:34 + * @LastEditTime: 2024-06-27 22:32:59 * @Email: [email protected] * @Describe: TODO */ @@ -162,6 +162,7 @@ void *test_thread_producer_start(void *arg) { } test_wait_all_threads_ready(&test_info->ctl); + TEST_INFO_LOG("producer thread:%lx, core:%d", exit_data->thread_id, t_arg->core); exit_data->metric_start = test_clock_time_get(); while (true) { @@ -234,6 +235,7 @@ void *test_thread_consumer_start(void *arg) { } test_wait_all_threads_ready(&test_info->ctl); + TEST_INFO_LOG("consumer thread:%lx, core:%d", exit_data->thread_id, t_arg->core); exit_data->metric_start = test_clock_time_get(); |
