From 1ec4c2ee0261efbc859ed38f63bc537bd74044fc Mon Sep 17 00:00:00 2001 From: Krzysztof Smolinski Date: Tue, 29 Nov 2022 11:28:08 +0100 Subject: [PATCH] test/raid: move common tests code to separate file Signed-off-by: Krzysztof Smolinski Change-Id: Ic668ce4e2bf041c0e1a3e0c683a0f40b3fd19c73 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15684 Community-CI: Mellanox Build Bot Reviewed-by: Tomasz Zawadzki Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- test/common/skipped_build_files.txt | 1 + test/unit/lib/bdev/raid/common.c | 129 +++++++++++++++++ test/unit/lib/bdev/raid/concat.c/concat_ut.c | 125 ++++------------ test/unit/lib/bdev/raid/raid5f.c/raid5f_ut.c | 144 ++++--------------- 4 files changed, 188 insertions(+), 211 deletions(-) create mode 100644 test/unit/lib/bdev/raid/common.c diff --git a/test/common/skipped_build_files.txt b/test/common/skipped_build_files.txt index 69d9ebb58..08842fad5 100644 --- a/test/common/skipped_build_files.txt +++ b/test/common/skipped_build_files.txt @@ -27,6 +27,7 @@ test/common/lib/test_env test/common/lib/test_sock test/common/lib/ut_multithread test/common/lib/test_rdma +test/unit/lib/bdev/raid/common test/unit/lib/blob/bs_dev_common test/unit/lib/blob/bs_scheduler test/unit/lib/ftl/common/utils diff --git a/test/unit/lib/bdev/raid/common.c b/test/unit/lib/bdev/raid/common.c new file mode 100644 index 000000000..af4fad449 --- /dev/null +++ b/test/unit/lib/bdev/raid/common.c @@ -0,0 +1,129 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (C) 2022 Intel Corporation. + * All rights reserved. + */ + +#include "spdk_cunit.h" +#include "spdk/stdinc.h" +#include "bdev/raid/bdev_raid.h" + +struct spdk_bdev_desc { + struct spdk_bdev *bdev; +}; + +struct raid_params { + uint8_t num_base_bdevs; + uint64_t base_bdev_blockcnt; + uint32_t base_bdev_blocklen; + uint32_t strip_size; +}; + +struct raid_params *g_params; +size_t g_params_count; +size_t g_params_size; + +#define ARRAY_FOR_EACH(a, e) \ + for (e = a; e < a + SPDK_COUNTOF(a); e++) + +#define RAID_PARAMS_FOR_EACH(p) \ + for (p = g_params; p < g_params + g_params_count; p++) + +static int +raid_test_params_alloc(size_t count) +{ + assert(g_params == NULL); + + g_params_size = count; + g_params_count = 0; + g_params = calloc(count, sizeof(*g_params)); + + return g_params ? 0 : -ENOMEM; +} + +static void +raid_test_params_free(void) +{ + g_params_count = 0; + g_params_size = 0; + free(g_params); +} + +static void +raid_test_params_add(struct raid_params *params) +{ + assert(g_params_count < g_params_size); + + memcpy(g_params + g_params_count, params, sizeof(*params)); + g_params_count++; +} + +static struct raid_bdev * +raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *module) +{ + struct raid_bdev *raid_bdev; + struct raid_base_bdev_info *base_info; + + raid_bdev = calloc(1, sizeof(*raid_bdev)); + SPDK_CU_ASSERT_FATAL(raid_bdev != NULL); + + raid_bdev->module = module; + raid_bdev->level = module->level; + raid_bdev->num_base_bdevs = params->num_base_bdevs; + + switch (raid_bdev->module->base_bdevs_constraint.type) { + case CONSTRAINT_MAX_BASE_BDEVS_REMOVED: + raid_bdev->min_base_bdevs_operational = raid_bdev->num_base_bdevs - + raid_bdev->module->base_bdevs_constraint.value; + break; + case CONSTRAINT_MIN_BASE_BDEVS_OPERATIONAL: + raid_bdev->min_base_bdevs_operational = raid_bdev->module->base_bdevs_constraint.value; + break; + case CONSTRAINT_UNSET: + raid_bdev->min_base_bdevs_operational = raid_bdev->num_base_bdevs; + break; + default: + CU_FAIL_FATAL("unsupported raid constraint type"); + }; + + raid_bdev->base_bdev_info = calloc(raid_bdev->num_base_bdevs, + sizeof(struct raid_base_bdev_info)); + SPDK_CU_ASSERT_FATAL(raid_bdev->base_bdev_info != NULL); + + RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { + struct spdk_bdev *bdev; + struct spdk_bdev_desc *desc; + + bdev = calloc(1, sizeof(*bdev)); + SPDK_CU_ASSERT_FATAL(bdev != NULL); + bdev->blockcnt = params->base_bdev_blockcnt; + bdev->blocklen = params->base_bdev_blocklen; + + desc = calloc(1, sizeof(*desc)); + SPDK_CU_ASSERT_FATAL(desc != NULL); + desc->bdev = bdev; + + base_info->bdev = bdev; + base_info->desc = desc; + } + + raid_bdev->strip_size = params->strip_size; + raid_bdev->strip_size_kb = params->strip_size * params->base_bdev_blocklen / 1024; + raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size); + raid_bdev->blocklen_shift = spdk_u32log2(params->base_bdev_blocklen); + raid_bdev->bdev.blocklen = params->base_bdev_blocklen; + + return raid_bdev; +} + +static void +raid_test_delete_raid_bdev(struct raid_bdev *raid_bdev) +{ + struct raid_base_bdev_info *base_info; + + RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { + free(base_info->bdev); + free(base_info->desc); + } + free(raid_bdev->base_bdev_info); + free(raid_bdev); +} diff --git a/test/unit/lib/bdev/raid/concat.c/concat_ut.c b/test/unit/lib/bdev/raid/concat.c/concat_ut.c index 2fe99b67b..f7ec0472f 100644 --- a/test/unit/lib/bdev/raid/concat.c/concat_ut.c +++ b/test/unit/lib/bdev/raid/concat.c/concat_ut.c @@ -11,6 +11,7 @@ #include "bdev/raid/bdev_raid.h" #include "bdev/raid/concat.c" +#include "../common.c" #define BLOCK_LEN (4096) @@ -22,10 +23,6 @@ enum CONCAT_IO_TYPE { CONCAT_UNMAP, }; -struct spdk_bdev_desc { - struct spdk_bdev *bdev; -}; - #define MAX_RECORDS (10) /* * Store the information of io requests sent to the underlying bdevs. @@ -161,22 +158,6 @@ init_globals(void) g_succeed = false; } -struct concat_params { - uint8_t num_base_bdevs; - uint64_t base_bdev_blockcnt; - uint32_t base_bdev_blocklen; - uint32_t strip_size; -}; - -static struct concat_params *g_params; -static size_t g_params_count; - -#define ARRAY_FOR_EACH(a, e) \ - for (e = a; e < a + SPDK_COUNTOF(a); e++) - -#define CONCAT_PARAMS_FOR_EACH(p) \ - for (p = g_params; p < g_params + g_params_count; p++) - static int test_setup(void) { @@ -188,33 +169,32 @@ test_setup(void) uint64_t *base_bdev_blockcnt; uint32_t *base_bdev_blocklen; uint32_t *strip_size_kb; - struct concat_params *params; + struct raid_params params; + uint64_t params_count; + int rc; - g_params_count = SPDK_COUNTOF(num_base_bdevs_values) * - SPDK_COUNTOF(base_bdev_blockcnt_values) * - SPDK_COUNTOF(base_bdev_blocklen_values) * - SPDK_COUNTOF(strip_size_kb_values); - g_params = calloc(g_params_count, sizeof(*g_params)); - if (!g_params) { - return -ENOMEM; + params_count = SPDK_COUNTOF(num_base_bdevs_values) * + SPDK_COUNTOF(base_bdev_blockcnt_values) * + SPDK_COUNTOF(base_bdev_blocklen_values) * + SPDK_COUNTOF(strip_size_kb_values); + rc = raid_test_params_alloc(params_count); + if (rc) { + return rc; } - params = g_params; - ARRAY_FOR_EACH(num_base_bdevs_values, num_base_bdevs) { ARRAY_FOR_EACH(base_bdev_blockcnt_values, base_bdev_blockcnt) { ARRAY_FOR_EACH(base_bdev_blocklen_values, base_bdev_blocklen) { ARRAY_FOR_EACH(strip_size_kb_values, strip_size_kb) { - params->num_base_bdevs = *num_base_bdevs; - params->base_bdev_blockcnt = *base_bdev_blockcnt; - params->base_bdev_blocklen = *base_bdev_blocklen; - params->strip_size = *strip_size_kb * 1024 / *base_bdev_blocklen; - if (params->strip_size == 0 || - params->strip_size > *base_bdev_blockcnt) { - g_params_count--; + params.num_base_bdevs = *num_base_bdevs; + params.base_bdev_blockcnt = *base_bdev_blockcnt; + params.base_bdev_blocklen = *base_bdev_blocklen; + params.strip_size = *strip_size_kb * 1024 / *base_bdev_blocklen; + if (params.strip_size == 0 || + params.strip_size > *base_bdev_blockcnt) { continue; } - params++; + raid_test_params_add(¶ms); } } } @@ -226,59 +206,14 @@ test_setup(void) static int test_cleanup(void) { - free(g_params); + raid_test_params_free(); return 0; } static struct raid_bdev * -create_raid_bdev(struct concat_params *params) +create_concat(struct raid_params *params) { - struct raid_bdev *raid_bdev; - struct raid_base_bdev_info *base_info; - - raid_bdev = calloc(1, sizeof(*raid_bdev)); - SPDK_CU_ASSERT_FATAL(raid_bdev != NULL); - - raid_bdev->module = &g_concat_module; - raid_bdev->num_base_bdevs = params->num_base_bdevs; - raid_bdev->base_bdev_info = calloc(raid_bdev->num_base_bdevs, - sizeof(struct raid_base_bdev_info)); - SPDK_CU_ASSERT_FATAL(raid_bdev->base_bdev_info != NULL); - - RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { - base_info->bdev = calloc(1, sizeof(*base_info->bdev)); - SPDK_CU_ASSERT_FATAL(base_info->bdev != NULL); - base_info->desc = calloc(1, sizeof(*base_info->desc)); - SPDK_CU_ASSERT_FATAL(base_info->desc != NULL); - - base_info->bdev->blockcnt = params->base_bdev_blockcnt; - base_info->bdev->blocklen = params->base_bdev_blocklen; - } - - raid_bdev->strip_size = params->strip_size; - raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size); - raid_bdev->bdev.blocklen = params->base_bdev_blocklen; - - return raid_bdev; -} - -static void -delete_raid_bdev(struct raid_bdev *raid_bdev) -{ - struct raid_base_bdev_info *base_info; - - RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { - free(base_info->bdev); - free(base_info->desc); - } - free(raid_bdev->base_bdev_info); - free(raid_bdev); -} - -static struct raid_bdev * -create_concat(struct concat_params *params) -{ - struct raid_bdev *raid_bdev = create_raid_bdev(params); + struct raid_bdev *raid_bdev = raid_test_create_raid_bdev(params, &g_concat_module); CU_ASSERT(concat_start(raid_bdev) == 0); return raid_bdev; @@ -288,19 +223,19 @@ static void delete_concat(struct raid_bdev *raid_bdev) { concat_stop(raid_bdev); - delete_raid_bdev(raid_bdev); + raid_test_delete_raid_bdev(raid_bdev); } static void test_concat_start(void) { struct raid_bdev *raid_bdev; - struct concat_params *params; + struct raid_params *params; struct concat_block_range *block_range; uint64_t total_blockcnt; int i; - CONCAT_PARAMS_FOR_EACH(params) { + RAID_PARAMS_FOR_EACH(params) { raid_bdev = create_concat(params); block_range = raid_bdev->module_private; total_blockcnt = 0; @@ -360,7 +295,7 @@ bdev_io_initialize(struct spdk_bdev_io *bdev_io, struct spdk_io_channel *ch, str } static void -submit_and_verify_rw(enum CONCAT_IO_TYPE io_type, struct concat_params *params) +submit_and_verify_rw(enum CONCAT_IO_TYPE io_type, struct raid_params *params) { struct raid_bdev *raid_bdev; struct spdk_bdev_io *bdev_io; @@ -430,12 +365,12 @@ submit_and_verify_rw(enum CONCAT_IO_TYPE io_type, struct concat_params *params) static void test_concat_rw(void) { - struct concat_params *params; + struct raid_params *params; enum CONCAT_IO_TYPE io_type_list[] = {CONCAT_WRITEV, CONCAT_READV}; enum CONCAT_IO_TYPE io_type; int i; - CONCAT_PARAMS_FOR_EACH(params) { + RAID_PARAMS_FOR_EACH(params) { for (i = 0; i < 2; i ++) { io_type = io_type_list[i]; submit_and_verify_rw(io_type, params); @@ -444,7 +379,7 @@ test_concat_rw(void) } static void -submit_and_verify_null_payload(enum CONCAT_IO_TYPE io_type, struct concat_params *params) +submit_and_verify_null_payload(enum CONCAT_IO_TYPE io_type, struct raid_params *params) { struct raid_bdev *raid_bdev; struct spdk_bdev_io *bdev_io; @@ -529,12 +464,12 @@ submit_and_verify_null_payload(enum CONCAT_IO_TYPE io_type, struct concat_params static void test_concat_null_payload(void) { - struct concat_params *params; + struct raid_params *params; enum CONCAT_IO_TYPE io_type_list[] = {CONCAT_FLUSH, CONCAT_UNMAP}; enum CONCAT_IO_TYPE io_type; int i; - CONCAT_PARAMS_FOR_EACH(params) { + RAID_PARAMS_FOR_EACH(params) { for (i = 0; i < 2; i ++) { io_type = io_type_list[i]; submit_and_verify_null_payload(io_type, params); diff --git a/test/unit/lib/bdev/raid/raid5f.c/raid5f_ut.c b/test/unit/lib/bdev/raid/raid5f.c/raid5f_ut.c index 1ab514185..2d1b03cc3 100644 --- a/test/unit/lib/bdev/raid/raid5f.c/raid5f_ut.c +++ b/test/unit/lib/bdev/raid/raid5f.c/raid5f_ut.c @@ -10,15 +10,12 @@ #include "common/lib/ut_multithread.c" #include "bdev/raid/raid5f.c" +#include "../common.c" DEFINE_STUB_V(raid_bdev_module_list_add, (struct raid_bdev_module *raid_module)); DEFINE_STUB(spdk_bdev_get_buf_align, size_t, (const struct spdk_bdev *bdev), 0); DEFINE_STUB_V(raid_bdev_module_stop_done, (struct raid_bdev *raid_bdev)); -struct spdk_bdev_desc { - struct spdk_bdev *bdev; -}; - void raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status status) { @@ -48,22 +45,6 @@ raid_bdev_io_complete_part(struct raid_bdev_io *raid_io, uint64_t completed, } } -struct raid5f_params { - uint8_t num_base_bdevs; - uint64_t base_bdev_blockcnt; - uint32_t base_bdev_blocklen; - uint32_t strip_size; -}; - -static struct raid5f_params *g_params; -static size_t g_params_count; - -#define ARRAY_FOR_EACH(a, e) \ - for (e = a; e < a + SPDK_COUNTOF(a); e++) - -#define RAID5F_PARAMS_FOR_EACH(p) \ - for (p = g_params; p < g_params + g_params_count; p++) - static int test_setup(void) { @@ -75,33 +56,32 @@ test_setup(void) uint64_t *base_bdev_blockcnt; uint32_t *base_bdev_blocklen; uint32_t *strip_size_kb; - struct raid5f_params *params; + struct raid_params params; + uint64_t params_count; + int rc; - g_params_count = SPDK_COUNTOF(num_base_bdevs_values) * - SPDK_COUNTOF(base_bdev_blockcnt_values) * - SPDK_COUNTOF(base_bdev_blocklen_values) * - SPDK_COUNTOF(strip_size_kb_values); - g_params = calloc(g_params_count, sizeof(*g_params)); - if (!g_params) { - return -ENOMEM; + params_count = SPDK_COUNTOF(num_base_bdevs_values) * + SPDK_COUNTOF(base_bdev_blockcnt_values) * + SPDK_COUNTOF(base_bdev_blocklen_values) * + SPDK_COUNTOF(strip_size_kb_values); + rc = raid_test_params_alloc(params_count); + if (rc) { + return rc; } - params = g_params; - ARRAY_FOR_EACH(num_base_bdevs_values, num_base_bdevs) { ARRAY_FOR_EACH(base_bdev_blockcnt_values, base_bdev_blockcnt) { ARRAY_FOR_EACH(base_bdev_blocklen_values, base_bdev_blocklen) { ARRAY_FOR_EACH(strip_size_kb_values, strip_size_kb) { - params->num_base_bdevs = *num_base_bdevs; - params->base_bdev_blockcnt = *base_bdev_blockcnt; - params->base_bdev_blocklen = *base_bdev_blocklen; - params->strip_size = *strip_size_kb * 1024 / *base_bdev_blocklen; - if (params->strip_size == 0 || - params->strip_size > *base_bdev_blockcnt) { - g_params_count--; + params.num_base_bdevs = *num_base_bdevs; + params.base_bdev_blockcnt = *base_bdev_blockcnt; + params.base_bdev_blocklen = *base_bdev_blocklen; + params.strip_size = *strip_size_kb * 1024 / *base_bdev_blocklen; + if (params.strip_size == 0 || + params.strip_size > *base_bdev_blockcnt) { continue; } - params++; + raid_test_params_add(¶ms); } } } @@ -113,84 +93,14 @@ test_setup(void) static int test_cleanup(void) { - free(g_params); + raid_test_params_free(); return 0; } -static struct raid_bdev * -create_raid_bdev(struct raid5f_params *params) -{ - struct raid_bdev *raid_bdev; - struct raid_base_bdev_info *base_info; - - raid_bdev = calloc(1, sizeof(*raid_bdev)); - SPDK_CU_ASSERT_FATAL(raid_bdev != NULL); - - raid_bdev->module = &g_raid5f_module; - raid_bdev->num_base_bdevs = params->num_base_bdevs; - - switch (raid_bdev->module->base_bdevs_constraint.type) { - case CONSTRAINT_MAX_BASE_BDEVS_REMOVED: - raid_bdev->min_base_bdevs_operational = raid_bdev->num_base_bdevs - - raid_bdev->module->base_bdevs_constraint.value; - break; - case CONSTRAINT_MIN_BASE_BDEVS_OPERATIONAL: - raid_bdev->min_base_bdevs_operational = raid_bdev->module->base_bdevs_constraint.value; - break; - case CONSTRAINT_UNSET: - raid_bdev->min_base_bdevs_operational = raid_bdev->num_base_bdevs; - break; - default: - CU_FAIL_FATAL("unsupported raid constraint type"); - }; - - raid_bdev->base_bdev_info = calloc(raid_bdev->num_base_bdevs, - sizeof(struct raid_base_bdev_info)); - SPDK_CU_ASSERT_FATAL(raid_bdev->base_bdev_info != NULL); - - RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { - struct spdk_bdev *bdev; - struct spdk_bdev_desc *desc; - - bdev = calloc(1, sizeof(*bdev)); - SPDK_CU_ASSERT_FATAL(bdev != NULL); - bdev->blockcnt = params->base_bdev_blockcnt; - bdev->blocklen = params->base_bdev_blocklen; - - desc = calloc(1, sizeof(*desc)); - SPDK_CU_ASSERT_FATAL(desc != NULL); - desc->bdev = bdev; - - base_info->bdev = bdev; - base_info->desc = desc; - } - - raid_bdev->strip_size = params->strip_size; - raid_bdev->strip_size_kb = params->strip_size * params->base_bdev_blocklen / 1024; - raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size); - raid_bdev->blocklen_shift = spdk_u32log2(params->base_bdev_blocklen); - raid_bdev->bdev.blocklen = params->base_bdev_blocklen; - - return raid_bdev; -} - -static void -delete_raid_bdev(struct raid_bdev *raid_bdev) -{ - struct raid_base_bdev_info *base_info; - - RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) { - free(base_info->bdev); - free(base_info->desc); - } - free(raid_bdev->base_bdev_info); - free(raid_bdev); -} - static struct raid5f_info * -create_raid5f(struct raid5f_params *params) +create_raid5f(struct raid_params *params) { - struct raid_bdev *raid_bdev = create_raid_bdev(params); + struct raid_bdev *raid_bdev = raid_test_create_raid_bdev(params, &g_raid5f_module); SPDK_CU_ASSERT_FATAL(raid5f_start(raid_bdev) == 0); @@ -204,19 +114,21 @@ delete_raid5f(struct raid5f_info *r5f_info) raid5f_stop(raid_bdev); - delete_raid_bdev(raid_bdev); + raid_test_delete_raid_bdev(raid_bdev); } static void test_raid5f_start(void) { - struct raid5f_params *params; + struct raid_params *params; - RAID5F_PARAMS_FOR_EACH(params) { + RAID_PARAMS_FOR_EACH(params) { struct raid5f_info *r5f_info; r5f_info = create_raid5f(params); + SPDK_CU_ASSERT_FATAL(r5f_info != NULL); + CU_ASSERT_EQUAL(r5f_info->stripe_blocks, params->strip_size * (params->num_base_bdevs - 1)); CU_ASSERT_EQUAL(r5f_info->total_stripes, params->base_bdev_blockcnt / params->strip_size); CU_ASSERT_EQUAL(r5f_info->raid_bdev->bdev.blockcnt, @@ -644,9 +556,9 @@ static void run_for_each_raid5f_config(void (*test_fn)(struct raid_bdev *raid_bdev, struct raid_bdev_io_channel *raid_ch)) { - struct raid5f_params *params; + struct raid_params *params; - RAID5F_PARAMS_FOR_EACH(params) { + RAID_PARAMS_FOR_EACH(params) { struct raid5f_info *r5f_info; struct raid_bdev_io_channel raid_ch = { 0 };