summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuyu <[email protected]>2024-06-27 22:35:55 -0400
committerliuyu <[email protected]>2024-06-27 22:35:55 -0400
commitd979f29f85925b721536234768ff5bbde0ab0be5 (patch)
treec84ec1d43896a8a213741bae6c0abf405acbf5cf
parent9ad6056a7a9779c782de142f1ca0c75619542db5 (diff)
创建队列的时候添加参数控制是否统计队列信息
-rw-r--r--bbq/include/bbq.h39
-rw-r--r--bbq/src/bbq.c7
-rw-r--r--bbq/tests/common/test_queue.c4
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
* @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
* @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();