From 03b1b860783256335798a3f3cf1c34ea3275bcb9 Mon Sep 17 00:00:00 2001 From: GangCao Date: Fri, 21 Oct 2022 09:24:55 -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. The srand() only needs to be called once to set the seed of futher more calls of rand(). Change-Id: I41ab3a46593513516ad11ea7a5b8960b449e9867 Signed-off-by: GangCao Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15108 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu Reviewed-by: Jim Harris --- examples/nvme/perf/perf.c | 11 ++++++++--- test/bdev/bdevperf/bdevperf.c | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/examples/nvme/perf/perf.c b/examples/nvme/perf/perf.c index 587d3341f..41e77b86b 100644 --- a/examples/nvme/perf/perf.c +++ b/examples/nvme/perf/perf.c @@ -745,7 +745,6 @@ register_file(const char *path) entry->io_size_blocks = g_io_size_bytes / blklen; 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); @@ -1257,8 +1256,11 @@ register_ns(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ns *ns) entry->size_in_ios = ns_size / g_io_size_bytes; entry->io_size_blocks = g_io_size_bytes / sector_size; - 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) { + entry->seed = rand(); + if (g_zipf_theta > 0) { + entry->zipf = spdk_zipf_create(entry->size_in_ios, g_zipf_theta, 0); + } } entry->block_size = spdk_nvme_ns_get_extended_sector_size(ns); @@ -3000,6 +3002,9 @@ main(int argc, char **argv) struct spdk_env_opts opts; pthread_t thread_id = 0; + /* Use the runtime PID to set the random seed */ + srand(getpid()); + spdk_env_opts_init(&opts); opts.name = "perf"; opts.pci_allowed = g_allowed_pci_addr; diff --git a/test/bdev/bdevperf/bdevperf.c b/test/bdev/bdevperf/bdevperf.c index d9c6e2fd1..f60fa3f70 100644 --- a/test/bdev/bdevperf/bdevperf.c +++ b/test/bdev/bdevperf/bdevperf.c @@ -1215,8 +1215,6 @@ 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; @@ -2158,6 +2156,9 @@ main(int argc, char **argv) struct spdk_app_opts opts = {}; int rc; + /* Use the runtime PID to set the random seed */ + srand(getpid()); + spdk_app_opts_init(&opts, sizeof(opts)); opts.name = "bdevperf"; opts.rpc_addr = NULL;