example/nvmf: Create only a single SPDK thread on the master core at startup
Stop creating the default lightweight thread per POSIX thread. Additionally, substitute the created master thread into g_init_thread directly as a preparation to the next patch. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I09643491e6b5aaf91d9958481f05e264a2ac5f7d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2542 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
f7ebaeaa59
commit
10190302d2
@ -309,7 +309,6 @@ nvmf_init_threads(void)
|
||||
uint32_t i;
|
||||
char thread_name[32];
|
||||
struct nvmf_reactor *nvmf_reactor;
|
||||
struct spdk_thread *thread;
|
||||
struct spdk_cpuset cpumask;
|
||||
uint32_t master_core = spdk_env_get_current_core();
|
||||
|
||||
@ -357,20 +356,14 @@ nvmf_init_threads(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Some SPDK libraries assume that there is at least some number of lightweight
|
||||
* threads that exist from the beginning of time. That assumption is currently
|
||||
* being removed from the SPDK libraries, but until that work is completed spawn
|
||||
* one lightweight thread per reactor here.
|
||||
*/
|
||||
SPDK_ENV_FOREACH_CORE(i) {
|
||||
spdk_cpuset_zero(&cpumask);
|
||||
spdk_cpuset_set_cpu(&cpumask, i, true);
|
||||
snprintf(thread_name, sizeof(thread_name), "spdk_thread_%u", i);
|
||||
thread = spdk_thread_create(thread_name, &cpumask);
|
||||
if (!thread) {
|
||||
fprintf(stderr, "failed to create spdk thread\n");
|
||||
return -1;
|
||||
}
|
||||
/* Spawn a lightweight thread only on the current core to manage this application. */
|
||||
spdk_cpuset_zero(&cpumask);
|
||||
spdk_cpuset_set_cpu(&cpumask, master_core, true);
|
||||
snprintf(thread_name, sizeof(thread_name), "nvmf_master_thread");
|
||||
g_init_thread = spdk_thread_create(thread_name, &cpumask);
|
||||
if (!g_init_thread) {
|
||||
fprintf(stderr, "failed to create spdk thread\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fprintf(stdout, "nvmf threads initlize successfully\n");
|
||||
@ -896,7 +889,6 @@ int main(int argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
struct spdk_env_opts opts;
|
||||
struct nvmf_lw_thread *lw_thread;
|
||||
|
||||
spdk_env_opts_init(&opts);
|
||||
opts.name = "nvmf-example";
|
||||
@ -919,8 +911,6 @@ int main(int argc, char **argv)
|
||||
* that continues initialization. This is how we bootstrap the
|
||||
* program so that all code from here on is running on an SPDK thread.
|
||||
*/
|
||||
lw_thread = TAILQ_FIRST(&g_master_reactor->threads);
|
||||
g_init_thread = spdk_thread_get_from_ctx(lw_thread);
|
||||
assert(g_init_thread != NULL);
|
||||
|
||||
rc = nvmf_setup_signal_handlers();
|
||||
|
Loading…
x
Reference in New Issue
Block a user