From eab96073cbca74cb16a80c9599ca8ae70bc16aee Mon Sep 17 00:00:00 2001 From: GangCao Date: Tue, 11 Oct 2022 02:12:15 -0400 Subject: [PATCH] test/bdevperf: set a random seed for rand rw testing To fix issue: #2726 And also fix the examples/nvme/perf tool. Change-Id: I4d1d362b7c1096d27a2d431851462d7bd161df88 Signed-off-by: GangCao Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14911 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: wanghailiang Reviewed-by: Paul Luse Reviewed-by: Shuhei Matsumoto Community-CI: Mellanox Build Bot --- examples/nvme/perf/perf.c | 8 ++++++-- test/bdev/bdevperf/bdevperf.c | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/examples/nvme/perf/perf.c b/examples/nvme/perf/perf.c index 995c8878b..587d3341f 100644 --- a/examples/nvme/perf/perf.c +++ b/examples/nvme/perf/perf.c @@ -744,8 +744,12 @@ register_file(const char *path) entry->size_in_ios = size / g_io_size_bytes; entry->io_size_blocks = g_io_size_bytes / blklen; - if (g_is_random && g_zipf_theta > 0) { - entry->zipf = spdk_zipf_create(entry->size_in_ios, g_zipf_theta, 0); + if (g_is_random) { + srand(getpid()); + entry->seed = rand(); + if (g_zipf_theta > 0) { + entry->zipf = spdk_zipf_create(entry->size_in_ios, g_zipf_theta, 0); + } } snprintf(entry->name, sizeof(entry->name), "%s", path); diff --git a/test/bdev/bdevperf/bdevperf.c b/test/bdev/bdevperf/bdevperf.c index 180476cac..d9c6e2fd1 100644 --- a/test/bdev/bdevperf/bdevperf.c +++ b/test/bdev/bdevperf/bdevperf.c @@ -1215,6 +1215,8 @@ end: static void job_init_rw(struct bdevperf_job *job, enum job_config_rw rw) { + srand(getpid()); + switch (rw) { case JOB_CONFIG_RW_READ: job->rw_percentage = 100; @@ -1225,16 +1227,19 @@ job_init_rw(struct bdevperf_job *job, enum job_config_rw rw) case JOB_CONFIG_RW_RANDREAD: job->is_random = true; job->rw_percentage = 100; + job->seed = rand(); break; case JOB_CONFIG_RW_RANDWRITE: job->is_random = true; job->rw_percentage = 0; + job->seed = rand(); break; case JOB_CONFIG_RW_RW: job->is_random = false; break; case JOB_CONFIG_RW_RANDRW: job->is_random = true; + job->seed = rand(); break; case JOB_CONFIG_RW_VERIFY: job->verify = true;