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:
parent
c441e27023
commit
cb97b86081
@ -18,6 +18,8 @@
|
|||||||
#include <rte_memzone.h>
|
#include <rte_memzone.h>
|
||||||
#include <rte_version.h>
|
#include <rte_version.h>
|
||||||
|
|
||||||
|
static __thread bool g_is_thread_unaffinitized;
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
virt_to_phys(void *vaddr)
|
virt_to_phys(void *vaddr)
|
||||||
{
|
{
|
||||||
@ -353,6 +355,10 @@ spdk_unaffinitize_thread(void)
|
|||||||
rte_cpuset_t new_cpuset;
|
rte_cpuset_t new_cpuset;
|
||||||
long num_cores, i;
|
long num_cores, i;
|
||||||
|
|
||||||
|
if (g_is_thread_unaffinitized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CPU_ZERO(&new_cpuset);
|
CPU_ZERO(&new_cpuset);
|
||||||
|
|
||||||
num_cores = sysconf(_SC_NPROCESSORS_CONF);
|
num_cores = sysconf(_SC_NPROCESSORS_CONF);
|
||||||
@ -363,6 +369,7 @@ spdk_unaffinitize_thread(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rte_thread_set_affinity(&new_cpuset);
|
rte_thread_set_affinity(&new_cpuset);
|
||||||
|
g_is_thread_unaffinitized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
@ -375,13 +382,17 @@ spdk_call_unaffinitized(void *cb(void *arg), void *arg)
|
|||||||
return NULL;
|
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);
|
||||||
|
g_is_thread_unaffinitized = false;
|
||||||
rte_thread_set_affinity(&orig_cpuset);
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user