bdevperf: change construct_job() signature

Accept job thread as argument
in bdevperf_construct_job().
This will allow for using single thread for
multiple jobs, as it is in FIO if multiple filenames are specified.

Change-Id: I0b6aa69aae1e1bf099170d3d495e0a83f97a857b
Signed-off-by: Vitaliy Mysak <vitaliy.mysak@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3365
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Vitaliy Mysak 2020-07-21 17:20:05 +02:00 committed by Tomasz Zawadzki
parent ed2a57a353
commit ceeb92900c

View File

@ -1055,6 +1055,25 @@ _bdevperf_construct_job_done(void *ctx)
}
}
/* Checkformat will not allow to use inlined type,
this is a workaround */
typedef struct spdk_thread *spdk_thread_t;
static spdk_thread_t
construct_job_thread(struct spdk_cpuset *cpumask, const char *tag)
{
char thread_name[32];
/* This function runs on the master thread. */
assert(g_master_thread == spdk_get_thread());
snprintf(thread_name, sizeof(thread_name), "%s_%s",
tag,
spdk_cpuset_fmt(cpumask));
return spdk_thread_create(thread_name, cpumask);
}
static void
_bdevperf_construct_job(void *ctx)
{
@ -1081,7 +1100,7 @@ end:
}
static int
bdevperf_construct_job(struct spdk_bdev *bdev, struct spdk_cpuset *cpumask,
bdevperf_construct_job(struct spdk_bdev *bdev, struct spdk_thread *thread,
uint32_t offset, uint32_t length)
{
struct bdevperf_job *job;
@ -1089,18 +1108,6 @@ bdevperf_construct_job(struct spdk_bdev *bdev, struct spdk_cpuset *cpumask,
int block_size, data_block_size;
int rc;
int task_num, n;
char thread_name[32];
struct spdk_thread *thread;
/* This function runs on the master thread. */
assert(g_master_thread == spdk_get_thread());
snprintf(thread_name, sizeof(thread_name), "%s_%s", spdk_bdev_get_name(bdev),
spdk_cpuset_fmt(cpumask));
/* Create a new thread for the job */
thread = spdk_thread_create(thread_name, cpumask);
assert(thread != NULL);
block_size = spdk_bdev_get_block_size(bdev);
data_block_size = spdk_bdev_get_data_block_size(bdev);
@ -1240,6 +1247,7 @@ bdevperf_construct_multithread_jobs(void)
struct spdk_bdev *bdev;
uint32_t i;
struct spdk_cpuset cpumask;
struct spdk_thread *thread;
uint32_t num_cores;
uint32_t blocks_per_job;
uint32_t offset;
@ -1268,9 +1276,11 @@ bdevperf_construct_multithread_jobs(void)
SPDK_ENV_FOREACH_CORE(i) {
spdk_cpuset_zero(&cpumask);
spdk_cpuset_set_cpu(&cpumask, i, true);
thread = construct_job_thread(&cpumask, spdk_bdev_get_name(bdev));
assert(thread);
/* Construct the job */
rc = bdevperf_construct_job(bdev, &cpumask, offset, blocks_per_job);
rc = bdevperf_construct_job(bdev, thread, offset, blocks_per_job);
if (rc < 0) {
g_run_rc = rc;
break;
@ -1287,9 +1297,11 @@ bdevperf_construct_multithread_jobs(void)
SPDK_ENV_FOREACH_CORE(i) {
spdk_cpuset_zero(&cpumask);
spdk_cpuset_set_cpu(&cpumask, i, true);
thread = construct_job_thread(&cpumask, spdk_bdev_get_name(bdev));
assert(thread);
/* Construct the job */
rc = bdevperf_construct_job(bdev, &cpumask, offset, blocks_per_job);
rc = bdevperf_construct_job(bdev, thread, offset, blocks_per_job);
if (rc < 0) {
g_run_rc = rc;
break;
@ -1331,6 +1343,7 @@ bdevperf_construct_jobs(void)
struct spdk_bdev *bdev;
uint32_t lcore;
struct spdk_cpuset cpumask;
struct spdk_thread *thread;
int rc;
/* There are two entirely separate modes for allocating jobs. Standard mode
@ -1358,9 +1371,11 @@ bdevperf_construct_jobs(void)
spdk_cpuset_zero(&cpumask);
spdk_cpuset_set_cpu(&cpumask, lcore, true);
thread = construct_job_thread(&cpumask, spdk_bdev_get_name(bdev));
assert(thread);
/* Construct the job */
rc = bdevperf_construct_job(bdev, &cpumask, 0, 0);
rc = bdevperf_construct_job(bdev, thread, 0, 0);
if (rc < 0) {
g_run_rc = rc;
}
@ -1375,9 +1390,11 @@ bdevperf_construct_jobs(void)
spdk_cpuset_zero(&cpumask);
spdk_cpuset_set_cpu(&cpumask, lcore, true);
thread = construct_job_thread(&cpumask, spdk_bdev_get_name(bdev));
assert(thread);
/* Construct the job */
rc = bdevperf_construct_job(bdev, &cpumask, 0, 0);
rc = bdevperf_construct_job(bdev, thread, 0, 0);
if (rc < 0) {
g_run_rc = rc;
break;