On 5/23/2023 3:50 AM, Kaisen You wrote:
When a DPDK application is started on only one numa node, memory is
allocated for only one socket. When interrupt threads use memory,
memory may not be found on the socket where the interrupt thread
is currently located, and memory has to be reallocated on the hugepage,
this operation will lead to performance degradation.

Fixes: 705356f0811f ("eal: simplify control thread creation")
Fixes: 770d41bf3309 ("malloc: fix allocation with unknown socket ID")
Cc: sta...@dpdk.org

Signed-off-by: Kaisen You <kaisenx....@intel.com>
---

For the record, I still think that this is a solution for a problem that should be fixed elsewhere, because a DPDK lcore (even main lcore!) having a specific NUMA node affinity is one of the most fundamental assumptions about DPDK, and I feel like we're inviting problems if we allow lcores to have multiple NUMA node affinities.

For example, if I run DPDK test app with the following command-line:

--lcores "1@(1,29),2@(30)"

The malloc autotest will fail because main lcore now returns -1 when we're calling `rte_socket_id()` from it. Correspondigly, any API's that use `rte_socket_id()` internally for various purposes (especially indexing arrays!) will now have to account for the fact that `rte_socket_id()` can just return -1 and it is not an exceptional situation.

IMO if we want to keep this behavior, EAL should at least warn the user that a DPDK lcore was assigned SOCKET_ID_ANY on account of multiple NUMA nodes being in its cpuset. So, as an unrealted change (so, i'm not suggesting doing it in this specific patchset), I would suggest that `thread_update_affinity()` should warn about DPDK lcore being assigned socket ID like that.

--
Thanks,
Anatoly

Reply via email to