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 <ziye.yang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17720
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Ziye Yang 2023-04-24 05:34:37 +00:00 committed by Konrad Sztyber
parent c441e27023
commit cb97b86081

View File

@ -18,6 +18,8 @@
#include <rte_memzone.h>
#include <rte_version.h>
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;
}