Commit 9ef9d4bd authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdevperf: Factor out creating multithread job config into helper function



The next patch will replace spdk_bdev_first/next_leaf() calls by
spdk_for_each_bdev(). As a preparation, factor out creating multithread
job config for a bdev into a helper function.

Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: Ib4df53af8b1bba5b012e93ff9d00c4089cca774e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16536


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent f91ba919
Loading
Loading
Loading
Loading
+28 −27
Original line number Diff line number Diff line
/*   SPDX-License-Identifier: BSD-3-Clause
 *   Copyright (C) 2016 Intel Corporation.
 *   Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES.
 *   Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES.
 *   All rights reserved.
 */

@@ -1858,14 +1858,35 @@ make_cli_job_config(const char *filename, int64_t offset, uint64_t range)
	return 0;
}

static int
bdevperf_construct_multithread_job_config(uint32_t num_cores, struct spdk_bdev *bdev)
{
	uint32_t i;
	uint64_t blocks_per_job;
	int64_t offset;
	int rc;

	blocks_per_job = spdk_bdev_get_num_blocks(bdev) / num_cores;
	offset = 0;

	SPDK_ENV_FOREACH_CORE(i) {
		rc = make_cli_job_config(spdk_bdev_get_name(bdev), offset, blocks_per_job);
		if (rc) {
			return rc;
		}

		offset += blocks_per_job;
	}

	return 0;
}

static void
bdevperf_construct_multithread_job_configs(void)
{
	struct spdk_bdev *bdev;
	uint32_t i;
	uint32_t num_cores;
	uint64_t blocks_per_job;
	int64_t offset;

	num_cores = 0;
	SPDK_ENV_FOREACH_CORE(i) {
@@ -1883,34 +1904,14 @@ bdevperf_construct_multithread_job_configs(void)
			fprintf(stderr, "Unable to find bdev '%s'\n", g_job_bdev_name);
			return;
		}

		blocks_per_job = spdk_bdev_get_num_blocks(bdev) / num_cores;
		offset = 0;

		SPDK_ENV_FOREACH_CORE(i) {
			g_run_rc = make_cli_job_config(g_job_bdev_name, offset, blocks_per_job);
			if (g_run_rc) {
				return;
			}

			offset += blocks_per_job;
		}
		g_run_rc = bdevperf_construct_multithread_job_config(num_cores, bdev);
	} else {
		bdev = spdk_bdev_first_leaf();
		while (bdev != NULL) {
			blocks_per_job = spdk_bdev_get_num_blocks(bdev) / num_cores;
			offset = 0;

			SPDK_ENV_FOREACH_CORE(i) {
				g_run_rc = make_cli_job_config(spdk_bdev_get_name(bdev),
							       offset, blocks_per_job);
			g_run_rc = bdevperf_construct_multithread_job_config(num_cores, bdev);
			if (g_run_rc) {
				return;
			}

				offset += blocks_per_job;
			}

			bdev = spdk_bdev_next_leaf(bdev);
		}
	}