diff --git a/examples/nvme/fio_plugin/fio_plugin.c b/examples/nvme/fio_plugin/fio_plugin.c index 7e29eb3ed..b35ea8fc6 100644 --- a/examples/nvme/fio_plugin/fio_plugin.c +++ b/examples/nvme/fio_plugin/fio_plugin.c @@ -177,23 +177,6 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, fio_file_set_size_known(f); } -static void -cpu_core_unaffinitized(void) -{ - cpu_set_t mask; - int i; - int num = sysconf(_SC_NPROCESSORS_CONF); - - CPU_ZERO(&mask); - for (i = 0; i < num; i++) { - CPU_SET(i, &mask); - } - - if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) { - SPDK_ERRLOG("set thread affinity failed\n"); - } -} - /* Called once at initialization. This is responsible for gathering the size of * each "file", which in our case are in the form * 'key=value [key=value] ... ns=value' @@ -234,7 +217,7 @@ static int spdk_fio_setup(struct thread_data *td) opts.mem_size = 512; spdk_env_init(&opts); spdk_env_initialized = true; - cpu_core_unaffinitized(); + spdk_unaffinitize_thread(); } for_each_file(td, f, i) { diff --git a/include/spdk/env.h b/include/spdk/env.h index ac8eaaa42..576df10f9 100644 --- a/include/spdk/env.h +++ b/include/spdk/env.h @@ -376,6 +376,11 @@ int spdk_pci_addr_parse(struct spdk_pci_addr *addr, const char *bdf); */ int spdk_pci_addr_fmt(char *bdf, size_t sz, const struct spdk_pci_addr *addr); +/** + * Removes any CPU affinitization from the current thread. + */ +void spdk_unaffinitize_thread(void); + /** * Call a function with CPU affinity unset. * diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index a8624a408..d05842570 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -228,19 +228,12 @@ void spdk_delay_us(unsigned int us) rte_delay_us(us); } -void * -spdk_call_unaffinitized(void *cb(void *arg), void *arg) +void +spdk_unaffinitize_thread(void) { - rte_cpuset_t orig_cpuset, new_cpuset; - void *ret; + rte_cpuset_t new_cpuset; long num_cores, i; - if (cb == NULL) { - return NULL; - } - - rte_thread_get_affinity(&orig_cpuset); - CPU_ZERO(&new_cpuset); num_cores = sysconf(_SC_NPROCESSORS_CONF); @@ -251,6 +244,21 @@ spdk_call_unaffinitized(void *cb(void *arg), void *arg) } rte_thread_set_affinity(&new_cpuset); +} + +void * +spdk_call_unaffinitized(void *cb(void *arg), void *arg) +{ + rte_cpuset_t orig_cpuset; + void *ret; + + if (cb == NULL) { + return NULL; + } + + rte_thread_get_affinity(&orig_cpuset); + + spdk_unaffinitize_thread(); ret = cb(arg);