[v4] net/iavf:enhance NUMA affinity heuristic
Checks
Commit Message
Trying to allocate memory on the first detected numa node has less
chance to find some memory actually available rather than on the main
lcore numa node (especially when the DPDK application is started only
on one numa node).
Fixes: 705356f0811f ("eal: simplify control thread creation")
Fixes: bb0bd346d5c1 ("eal: suggest using --lcores option")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Kaisen You <kaisenx.you@intel.com>
---
Changes since v3:
- add the assignment of socket_id in thread initialization,
Changes since v2:
- add uncommitted local change and fix compilation,
Changes since v1:
- accomodate for configurations with main lcore running on multiples
physical cores belonging to different numa,
---
lib/eal/common/eal_common_thread.c | 1 +
lib/eal/common/malloc_heap.c | 4 ++++
2 files changed, 5 insertions(+)
Comments
31/01/2023 16:05, Kaisen You:
> lib/eal/common/eal_common_thread.c | 1 +
> lib/eal/common/malloc_heap.c | 4 ++++
> 2 files changed, 5 insertions(+)
Why the title refers to net/iavf?
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: 2023年2月1日 0:06
> To: You, KaisenX <kaisenx.you@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Zhou, YidingX
> <yidingx.zhou@intel.com>; david.marchand@redhat.com; Matz, Olivier
> <olivier.matz@6wind.com>; ferruh.yigit@amd.com; You, KaisenX
> <kaisenx.you@intel.com>; zhoumin@loongson.cn; Burakov, Anatoly
> <anatoly.burakov@intel.com>; stable@dpdk.org
> Subject: Re: [PATCH v4] net/iavf:enhance NUMA affinity heuristic
>
> 31/01/2023 16:05, Kaisen You:
> > lib/eal/common/eal_common_thread.c | 1 +
> > lib/eal/common/malloc_heap.c | 4 ++++
> > 2 files changed, 5 insertions(+)
>
> Why the title refers to net/iavf?
Sorry, the issue that was solved before is related to net/iavf.
The new solution is compatible with all situations. I will release a new patch.
>
@@ -251,6 +251,7 @@ static void *ctrl_thread_init(void *arg)
void *routine_arg = params->arg;
__rte_thread_init(rte_lcore_id(), cpuset);
+ RTE_PER_LCORE(_socket_id) = SOCKET_ID_ANY;
params->ret = rte_thread_set_affinity_by_id(rte_thread_self(), cpuset);
if (params->ret != 0) {
__atomic_store_n(¶ms->ctrl_thread_status,
@@ -717,6 +717,10 @@ malloc_get_numa_socket(void)
return socket_id;
}
+ socket_id = rte_lcore_to_socket_id(rte_get_main_lcore());
+ if (socket_id != (unsigned int)SOCKET_ID_ANY)
+ return socket_id;
+
return rte_socket_id_by_idx(0);
}