From cb97b86081c6d46aaa2aef3749a10c48415f04bb Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Mon, 24 Apr 2023 05:34:37 +0000 Subject: [PATCH] env_dpdk: optimizing spdk_call_unaffinitized Purpose: Reduce unnecessary affinity setting. For some usage cases, the app will not use spdk framework and already call spdk_unaffinitize_thread after calling spdk_env_init(). Change-Id: I5fa8349913c4567ab63c5a01271e7b2755e53257 Signed-off-by: Ziye Yang Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17720 Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Konrad Sztyber --- lib/env_dpdk/env.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index b6b8135b8..b5cc18aa2 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -18,6 +18,8 @@ #include #include +static __thread bool g_is_thread_unaffinitized; + static uint64_t virt_to_phys(void *vaddr) { @@ -353,6 +355,10 @@ spdk_unaffinitize_thread(void) rte_cpuset_t new_cpuset; long num_cores, i; + if (g_is_thread_unaffinitized) { + return; + } + CPU_ZERO(&new_cpuset); num_cores = sysconf(_SC_NPROCESSORS_CONF); @@ -363,6 +369,7 @@ spdk_unaffinitize_thread(void) } rte_thread_set_affinity(&new_cpuset); + g_is_thread_unaffinitized = true; } void * @@ -375,13 +382,17 @@ spdk_call_unaffinitized(void *cb(void *arg), void *arg) return NULL; } - rte_thread_get_affinity(&orig_cpuset); + if (g_is_thread_unaffinitized) { + ret = cb(arg); + } else { + rte_thread_get_affinity(&orig_cpuset); + spdk_unaffinitize_thread(); - spdk_unaffinitize_thread(); + ret = cb(arg); - ret = cb(arg); - - rte_thread_set_affinity(&orig_cpuset); + rte_thread_set_affinity(&orig_cpuset); + g_is_thread_unaffinitized = false; + } return ret; }