30 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 119 #define BE_UT_QUEUE_TEST(q_size_max, producers, consumers, items_nr) \ 121 .butc_q_size_max = (q_size_max), \ 122 .butc_producers = (producers), \ 123 .butc_consumers = (consumers), \ 124 .butc_items_nr = (items_nr) \ 141 #undef BE_UT_QUEUE_TEST 158 ++
param->butqp_peeks_successful;
163 ++
param->butqp_peeks_unsuccessful;
183 for (
i = 0;
i <
param->butqp_items_nr; ++
i) {
185 if (
param->butqp_is_producer) {
193 ctx->butx_result[
index].butr_put_before = before;
194 ctx->butx_result[
index].butr_put_after =
196 if (
index ==
ctx->butx_cfg->butc_items_nr - 1) {
203 successful =
param->butqp_index % 2 == 0;
211 ++
param->butqp_gets_unsuccessful;
215 ++
param->butqp_gets_successful;
218 ctx->butx_result[
index].butr_checked =
true;
219 ctx->butx_result[
index].butr_get_before = before;
220 ctx->butx_result[
index].butr_get_after =
262 ctx->butx_cfg = test_cfg;
270 for (
i = 0;
i < items_nr; ++
i) {
272 .buqd_user = &
ctx->butx_data[
i],
281 for (
i = 0;
i < threads_nr; ++
i) {
285 if (
params[
i].butqp_is_producer) {
292 remainder = items_nr % divisor;
293 params[
i].butqp_items_nr = items_nr / divisor +
295 0 :
params[
i].butqp_index < remainder) +
300 0, +
params[j].butqp_items_nr) == items_nr);
308 j].butqp_items_nr) ==
315 for (
i = 0;
i < threads_nr; ++
i)
321 for (
i = 0;
i < threads_nr; ++
i)
324 r =
ctx->butx_result;
328 j].butqp_gets_successful) ==
336 j].butqp_gets_unsuccessful) ==
344 params[j].butqp_peeks_unsuccessful > 0));
347 r[j].butr_put_before <
r[j].butr_get_after));
349 r[j].butr_put_before <
r[j + 1].butr_put_after));
351 r[j].butr_get_before <
r[j + 1].butr_get_after));
389 for (
i = 1;
i <=
MAX; ++
i)
390 for (j = 1; j <=
MAX; ++j)
391 for (k = 1; k <=
MAX; ++k) {
396 .butc_items_nr = 100,
397 .butc_seed =
i * 100 + j * 10 + k,
405 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL void m0_be_queue_unlock(struct m0_be_queue *bq)
static void be_ut_queue(enum be_ut_queue_test test)
#define M0_ALLOC_ARR(arr, nr)
static void be_ut_queue_thread(void *_param)
void m0_be_ut_queue_10_100_100(void)
#define M0_BE_QUEUE_PUT(bq, op, ptr)
uint64_t butqp_gets_successful
void m0_be_ut_queue_from_1_to_10(void)
M0_INTERNAL bool m0_buf_eq(const struct m0_buf *x, const struct m0_buf *y)
#define M0_BE_QUEUE_GET(bq, op, ptr, successful)
void m0_be_ut_queue_100_1_10(void)
struct m0_semaphore butqp_sem_start
struct be_ut_queue_result * butx_result
#define m0_exists(var, nr,...)
void m0_be_ut_queue_1_1_1(void)
m0_bcount_t buqd_payload_size
struct be_ut_queue_cfg * butx_cfg
void m0_be_ut_queue_100_10_10(void)
static struct be_ut_queue_cfg be_ut_queue_tests_cfg[BE_UT_QUEUE_NR]
struct m0_be_queue * butx_bq
#define M0_BE_TX_CREDIT(nr, size)
M0_INTERNAL int m0_be_queue_init(struct m0_be_queue *bq, struct m0_be_queue_cfg *cfg)
struct m0_atomic64 butx_clock
static struct nlx_ping_client_params * params
void m0_be_ut_queue_10_5_100(void)
uint64_t butqp_peeks_successful
M0_INTERNAL void m0_be_queue_fini(struct m0_be_queue *bq)
uint64_t butqp_gets_unsuccessful
static void be_ut_queue_with_cfg(struct be_ut_queue_cfg *test_cfg)
M0_INTERNAL void m0_be_queue_lock(struct m0_be_queue *bq)
static uint64_t be_ut_queue_data_index(struct be_ut_queue_ctx *ctx, struct be_ut_queue_data *data)
M0_INTERNAL void m0_ut_threads_stop(struct m0_ut_threads_descr *descr)
struct be_ut_queue_ctx * butqp_ctx
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
void m0_be_ut_queue_2_1_1(void)
static struct fdmi_ctx ctx
void(* utd_thread_func)(void *param)
void m0_be_ut_queue_10_100_5(void)
#define m0_forall(var, nr,...)
void m0_be_ut_queue_10_1_100(void)
M0_INTERNAL void m0_be_op_reset(struct m0_be_op *op)
#define M0_BUF_INIT_PTR(p)
M0_INTERNAL uint64_t m0_rnd64(uint64_t *seed)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_ut_threads_start(struct m0_ut_threads_descr *descr, int thread_nr, void *param_array, size_t param_size)
struct m0_atomic64 butx_pos
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
#define M0_BE_QUEUE_PEEK(bq, ptr)
#define BE_UT_QUEUE_TEST(q_size_max, producers, consumers, items_nr)
#define M0_ASSERT_INFO(cond, fmt,...)
void m0_be_ut_queue_10_100_1(void)
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
struct m0_be_tx_credit buqd_credit
M0_INTERNAL void m0_be_queue_end(struct m0_be_queue *bq)
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
void m0_be_ut_queue_100_1_1(void)
struct be_ut_queue_data * butx_data
void m0_be_ut_queue_100_10_1(void)
uint64_t butqp_peeks_unsuccessful
static int64_t m0_atomic64_add_return(struct m0_atomic64 *a, int64_t d)
M0_INTERNAL void m0_be_op_wait(struct m0_be_op *op)
static void m0_atomic64_set(struct m0_atomic64 *a, int64_t num)
static void be_ut_queue_try_peek(struct be_ut_queue_thread_param *param, struct be_ut_queue_ctx *ctx)