diff options
| author | liuyu <[email protected]> | 2024-07-01 23:14:39 -0400 |
|---|---|---|
| committer | liuyu <[email protected]> | 2024-07-01 23:14:39 -0400 |
| commit | d7b76b021a24a1090b41c5cddca10a70f731a2b4 (patch) | |
| tree | ee9c9d0fe2249fe6187158c1945d7c873a1c4a9c /bbq/tests | |
| parent | 075525658564b863fe6feec425b2fe878575e3c7 (diff) | |
性能优化,cache line对齐dev-single
Diffstat (limited to 'bbq/tests')
| -rw-r--r-- | bbq/tests/common/test_queue.c | 4 | ||||
| -rw-r--r-- | bbq/tests/unittest/ut_head_cursor.cc | 28 | ||||
| -rw-r--r-- | bbq/tests/unittest/ut_mix.cc | 28 |
3 files changed, 43 insertions, 17 deletions
diff --git a/bbq/tests/common/test_queue.c b/bbq/tests/common/test_queue.c index e72f1ee..045e63c 100644 --- a/bbq/tests/common/test_queue.c +++ b/bbq/tests/common/test_queue.c @@ -1,6 +1,6 @@ /* * @Author: liuyu - * @LastEditTime: 2024-07-01 03:56:01 + * @LastEditTime: 2024-07-01 05:23:47 * @Email: [email protected] * @Describe: TODO */ @@ -24,7 +24,7 @@ uint32_t test_bbq_enqueue_burst(void *ring, void **obj_table, uint32_t n, uint16 } int test_queue_init_bbq(test_cfg *cfg, test_queue_s *q) { -#if 1 +#if 0 // 开启了BBQ_F_ENABLE_STAT 会导致性能下降 unsigned int flags = BBQ_F_RETRY_NEW | BBQ_F_ENABLE_STAT; #else diff --git a/bbq/tests/unittest/ut_head_cursor.cc b/bbq/tests/unittest/ut_head_cursor.cc index bbd2296..3c25d9d 100644 --- a/bbq/tests/unittest/ut_head_cursor.cc +++ b/bbq/tests/unittest/ut_head_cursor.cc @@ -1,6 +1,6 @@ /* * @Author: liuyu - * @LastEditTime: 2024-07-01 03:57:33 + * @LastEditTime: 2024-07-01 22:34:42 * @Email: [email protected] * @Describe: TODO */ @@ -33,13 +33,13 @@ class bbq_head_cursor : public testing::Test { // 继承了 testing::Test }; void expect_phead(struct bbq *q, uint64_t idx, uint64_t vsn, int line) { - uint64_t ph = bbq_atomic64_load(&q->phead); + uint64_t ph = bbq_atomic64_load(&q->phead.value); EXPECT_EQ(bbq_head_idx(q, ph), idx) << "line: " << line; EXPECT_EQ(bbq_head_vsn(q, ph), vsn) << "line: " << line; } void expect_chead(struct bbq *q, uint64_t idx, uint64_t vsn, int line) { - uint64_t ch = bbq_atomic64_load(&q->chead); + uint64_t ch = bbq_atomic64_load(&q->chead.value); EXPECT_EQ(bbq_head_idx(q, ch), idx) << "line: " << line; EXPECT_EQ(bbq_head_vsn(q, ch), vsn) << "line: " << line; } @@ -78,8 +78,8 @@ TEST_F(bbq_head_cursor, init) { // 1.初始化状态,除了第一个block外其他块的4个游标都指向最后一个条目 - EXPECT_EQ(bbq_atomic64_load(&q->phead), 0); - EXPECT_EQ(bbq_atomic64_load(&q->chead), 0); + EXPECT_EQ(bbq_atomic64_load(&q->phead.value), 0); + EXPECT_EQ(bbq_atomic64_load(&q->chead.value), 0); expect_eq_allocated(q, &q->blocks[0], 0, 0, __LINE__); expect_eq_committed(q, &q->blocks[0], 0, 0, __LINE__); @@ -115,8 +115,8 @@ void ut_produce_something(uint32_t produce_cnt) { EXPECT_TRUE(ret == BBQ_OK); } - EXPECT_EQ(bbq_atomic64_load(&q->phead), 0); - EXPECT_EQ(bbq_atomic64_load(&q->chead), 0); + EXPECT_EQ(bbq_atomic64_load(&q->phead.value), 0); + EXPECT_EQ(bbq_atomic64_load(&q->chead.value), 0); expect_eq_allocated(q, &q->blocks[0], produce_cnt, 0, __LINE__); expect_eq_committed(q, &q->blocks[0], produce_cnt, 0, __LINE__); expect_eq_reserved(q, &q->blocks[0], 0, 0, __LINE__); @@ -129,8 +129,8 @@ void ut_produce_something(uint32_t produce_cnt) { EXPECT_EQ(dequeue_data, TEST_DATA_MAGIC); } - EXPECT_EQ(bbq_atomic64_load(&q->phead), 0); - EXPECT_EQ(bbq_atomic64_load(&q->chead), 0); + EXPECT_EQ(bbq_atomic64_load(&q->phead.value), 0); + EXPECT_EQ(bbq_atomic64_load(&q->chead.value), 0); expect_eq_allocated(q, &q->blocks[0], produce_cnt, 0, __LINE__); expect_eq_committed(q, &q->blocks[0], produce_cnt, 0, __LINE__); expect_eq_reserved(q, &q->blocks[0], produce_cnt, 0, __LINE__); @@ -174,7 +174,7 @@ void ut_produce_next_block(uint32_t over) { EXPECT_TRUE(ret == BBQ_OK); } - EXPECT_EQ(bbq_atomic64_load(&q->chead), 0); + EXPECT_EQ(bbq_atomic64_load(&q->chead.value), 0); expect_phead(q, 1, 0, __LINE__); expect_eq_allocated(q, &q->blocks[0], bs, 0, __LINE__); expect_eq_committed(q, &q->blocks[0], bs, 0, __LINE__); @@ -301,8 +301,8 @@ TEST_F(bbq_head_cursor, retry_new_full_empty) { EXPECT_TRUE(ret == BBQ_ERR_FULL); } - ph = bbq_atomic64_load(&q->phead); - ch = bbq_atomic64_load(&q->chead); + ph = bbq_atomic64_load(&q->phead.value); + ch = bbq_atomic64_load(&q->chead.value); if (i == 0) { EXPECT_EQ((ph + 1) & q->idx_mask, ch & q->idx_mask); } else { @@ -329,8 +329,8 @@ TEST_F(bbq_head_cursor, retry_new_full_empty) { EXPECT_TRUE(ret == BBQ_ERR_EMPTY); } - ph = bbq_atomic64_load(&q->phead); - ch = bbq_atomic64_load(&q->chead); + ph = bbq_atomic64_load(&q->phead.value); + ch = bbq_atomic64_load(&q->chead.value); EXPECT_EQ(ph & q->idx_mask, ch & q->idx_mask); for (uint32_t i = 0; i < q->bn; i++) { EXPECT_EQ(bbq_atomic64_load(&q->blocks[i].committed) & q->off_mask, q->bs); diff --git a/bbq/tests/unittest/ut_mix.cc b/bbq/tests/unittest/ut_mix.cc index cd545bf..81b362f 100644 --- a/bbq/tests/unittest/ut_mix.cc +++ b/bbq/tests/unittest/ut_mix.cc @@ -1,6 +1,6 @@ /* * @Author: liuyu - * @LastEditTime: 2024-06-27 07:25:43 + * @LastEditTime: 2024-07-01 23:09:56 * @Email: [email protected] * @Describe: bbq除了队列操作外,其他函数的测试 */ @@ -148,3 +148,29 @@ TEST_F(bbq_mix, bbq_block_number_calc) { } } } + +#define OFFSETOF(type, member) ((size_t) & ((type *)0)->member) +#define PRINT_OFFSETOF(type, member) printf("Offset of '%s' in '%s' is %zu\n", #member, #type, OFFSETOF(type, member)) +#define PTR_ALIGNED_64(ptr) (((uintptr_t)ptr & (64 - 1)) == 0) + +TEST_F(bbq_mix, bbq_cache_line) { + + // 创建队列 + struct bbq *q = bbq_create("test_bbq", 4096, BBQ_SOCKET_ID_ANY, BBQ_F_RETRY_NEW, NULL, NULL); + printf("q:%p\n", q); + ASSERT_NE(q, nullptr); + + // 首地址64字节对齐 + ASSERT_EQ(PTR_ALIGNED_64(q), true); + + // 关键成员64字节对齐 + ASSERT_EQ(PTR_ALIGNED_64(&q->name), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->socket_id), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->phead), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->chead), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->blocks), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->blocks[0].committed), true); + ASSERT_EQ(PTR_ALIGNED_64(&q->blocks[0].entries), true); + + bbq_destory(q); +}
\ No newline at end of file |
