From fc3e1b6fb0b92f91b3f0cd1ce78e3351e7d8003d Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Tue, 4 Jun 2019 10:51:36 +0200 Subject: [PATCH] bdevperf: target bdev selection Allow the user to select target bdev to be used by bdevperf. It's useful when the config contains multiple bdevs, but only one is supposed to be utilized by bdevperf directly. Change-Id: I51aa645dcf60a4413057d86f68fe24442b280367 Signed-off-by: Konrad Sztyber Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456787 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk --- test/bdev/bdevperf/bdevperf.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/test/bdev/bdevperf/bdevperf.c b/test/bdev/bdevperf/bdevperf.c index 239c122cd..aea5fe36a 100644 --- a/test/bdev/bdevperf/bdevperf.c +++ b/test/bdev/bdevperf/bdevperf.c @@ -78,6 +78,7 @@ static bool g_zcopy = true; static unsigned g_master_core; static int g_time_in_sec; static bool g_mix_specified; +static const char *g_target_bdev_name; static struct spdk_poller *g_perf_timer = NULL; @@ -349,14 +350,24 @@ bdevperf_construct_targets(void) struct spdk_bdev *bdev; int rc; - bdev = spdk_bdev_first_leaf(); - while (bdev != NULL) { - rc = bdevperf_construct_target(bdev); - if (rc != 0) { + if (g_target_bdev_name != NULL) { + bdev = spdk_bdev_get_by_name(g_target_bdev_name); + if (!bdev) { + fprintf(stderr, "Unable to find bdev '%s'\n", g_target_bdev_name); return; } - bdev = spdk_bdev_next_leaf(bdev); + bdevperf_construct_target(bdev); + } else { + bdev = spdk_bdev_first_leaf(); + while (bdev != NULL) { + rc = bdevperf_construct_target(bdev); + if (rc != 0) { + return; + } + + bdev = spdk_bdev_next_leaf(bdev); + } } } @@ -794,6 +805,7 @@ bdevperf_usage(void) printf("\t\t(Formula: M = 2 / (n + 1), EMA[i+1] = IO/s * M + (1 - M) * EMA[i])\n"); printf("\t\t(only valid with -S)\n"); printf(" -S show performance result in real time every seconds\n"); + printf(" -T target bdev\n"); } /* @@ -1043,6 +1055,8 @@ bdevperf_parse_arg(int ch, char *arg) if (ch == 'w') { g_workload_type = optarg; + } else if (ch == 'T') { + g_target_bdev_name = optarg; } else { tmp = spdk_strtoll(optarg, 10); if (tmp < 0) { @@ -1102,7 +1116,7 @@ main(int argc, char **argv) g_time_in_sec = 0; g_mix_specified = false; - if ((rc = spdk_app_parse_args(argc, argv, &opts, "q:o:t:w:M:P:S:", NULL, + if ((rc = spdk_app_parse_args(argc, argv, &opts, "q:o:t:w:M:P:S:T:", NULL, bdevperf_parse_arg, bdevperf_usage)) != SPDK_APP_PARSE_ARGS_SUCCESS) { return rc;