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:
parent
ed2a57a353
commit
ceeb92900c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user