From 00647138719a3ce9413e7f97fb9ebf7ad31c6e90 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Mon, 25 Apr 2022 17:13:18 +0000 Subject: [PATCH] bdev: more ZERO_BUFFER_SIZE to bdev_internal.h The bdevio test app has some test cases verifying that write zeroes commands are handled correctly, but using knowledge of the ZERO_BUFFER_SIZE that the bdev library uses for splitting larger write zeroes commands. Instead of hardcoding that 1MB value in bdevio.c, have bdevio.c use ZERO_BUFFER_SIZE directly instead. But this requires moving ZERO_BUFFER_SIZE into bdev_internal.h and having bdevio.c include that file. We do this instead of putting ZERO_BUFFER_SIZE in the public API because we don't want users to make any kind of dependencies on this value. While here, also rename the tests that are using this value, so that the test names don't include any reference to the specific size of this bdev-internal zero buffer size. Signed-off-by: Jim Harris Change-Id: Ia29d92a706cb1f86b4c29374dc2a9beccf679208 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12383 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Tomasz Zawadzki Reviewed-by: Aleksey Marchuk Reviewed-by: Shuhei Matsumoto --- lib/bdev/bdev.c | 1 - lib/bdev/bdev_internal.h | 2 ++ test/bdev/bdevio/Makefile | 1 + test/bdev/bdevio/bdevio.c | 24 ++++++++++++------------ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 8a22ac2c9..65554c632 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -67,7 +67,6 @@ int __itt_init_ittlib(const char *, __itt_group_id); #define BUF_SMALL_POOL_SIZE 8191 #define BUF_LARGE_POOL_SIZE 1023 #define NOMEM_THRESHOLD_COUNT 8 -#define ZERO_BUFFER_SIZE 0x100000 #define SPDK_BDEV_QOS_TIMESLICE_IN_USEC 1000 #define SPDK_BDEV_QOS_MIN_IO_PER_TIMESLICE 1 diff --git a/lib/bdev/bdev_internal.h b/lib/bdev/bdev_internal.h index d1fa6e65a..88f383895 100644 --- a/lib/bdev/bdev_internal.h +++ b/lib/bdev/bdev_internal.h @@ -36,6 +36,8 @@ #include "spdk/bdev.h" +#define ZERO_BUFFER_SIZE 0x100000 + struct spdk_bdev; struct spdk_bdev_io; struct spdk_bdev_channel; diff --git a/test/bdev/bdevio/Makefile b/test/bdev/bdevio/Makefile index 166e48096..d0df7c25e 100644 --- a/test/bdev/bdevio/Makefile +++ b/test/bdev/bdevio/Makefile @@ -38,6 +38,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk APP = bdevio C_SRCS := bdevio.c +CFLAGS += -I$(SPDK_ROOT_DIR)/lib/bdev SPDK_LIB_LIST = $(ALL_MODULES_LIST) event event_bdev diff --git a/test/bdev/bdevio/bdevio.c b/test/bdev/bdevio/bdevio.c index 012c4e707..3edda2a8c 100644 --- a/test/bdev/bdevio/bdevio.c +++ b/test/bdev/bdevio/bdevio.c @@ -44,6 +44,7 @@ #include "spdk/util.h" #include "spdk/string.h" +#include "bdev_internal.h" #include "CUnit/Basic.h" #define BUFFER_IOVS 1024 @@ -564,15 +565,14 @@ blockdev_write_zeroes_read_4k(void) * This i/o will not have to split at the bdev layer. */ static void -blockdev_write_zeroes_read_1m(void) +blockdev_write_zeroes_read_no_split(void) { uint32_t data_length; uint64_t offset; int pattern; int expected_rc; - /* Data size = 1M */ - data_length = 1048576; + data_length = ZERO_BUFFER_SIZE; /* from bdev_internal.h */ offset = 0; pattern = 0xA3; /* Params are valid, hence the expected return value @@ -587,15 +587,14 @@ blockdev_write_zeroes_read_1m(void) * write-zeroes is not supported by the bdev. */ static void -blockdev_write_zeroes_read_3m(void) +blockdev_write_zeroes_read_split(void) { uint32_t data_length; uint64_t offset; int pattern; int expected_rc; - /* Data size = 3M */ - data_length = 3145728; + data_length = 3 * ZERO_BUFFER_SIZE; /* from bdev_internal.h */ offset = 0; pattern = 0xA3; /* Params are valid, hence the expected return value @@ -612,15 +611,14 @@ blockdev_write_zeroes_read_3m(void) * the bdev layer zero buffer size. */ static void -blockdev_write_zeroes_read_3m_500k(void) +blockdev_write_zeroes_read_split_partial(void) { uint32_t data_length; uint64_t offset; int pattern; int expected_rc; - /* Data size = 3.5M */ - data_length = 3670016; + data_length = ZERO_BUFFER_SIZE * 7 / 2; offset = 0; pattern = 0xA3; /* Params are valid, hence the expected return value @@ -1175,9 +1173,11 @@ __setup_ut_on_single_target(struct io_target *target) if ( CU_add_test(suite, "blockdev write read 4k", blockdev_write_read_4k) == NULL || CU_add_test(suite, "blockdev write zeroes read 4k", blockdev_write_zeroes_read_4k) == NULL - || CU_add_test(suite, "blockdev write zeroes read 1m", blockdev_write_zeroes_read_1m) == NULL - || CU_add_test(suite, "blockdev write zeroes read 3m", blockdev_write_zeroes_read_3m) == NULL - || CU_add_test(suite, "blockdev write zeroes read 3.5m", blockdev_write_zeroes_read_3m_500k) == NULL + || CU_add_test(suite, "blockdev write zeroes read no split", + blockdev_write_zeroes_read_no_split) == NULL + || CU_add_test(suite, "blockdev write zeroes read split", blockdev_write_zeroes_read_split) == NULL + || CU_add_test(suite, "blockdev write zeroes read split partial", + blockdev_write_zeroes_read_split_partial) == NULL || CU_add_test(suite, "blockdev reset", blockdev_test_reset) == NULL || CU_add_test(suite, "blockdev write read 512 bytes",