On 10/29/2026 5:19 PM, Konstantin Ananyev wrote:
Currently lcore_conf is a global static array. When multiple
ports/lcores are distributed across different NUMA nodes, datapath
suffers from severe cross-NUMA memory access penalty.
On Kunpeng platform, sizeof(struct lcore_conf) reaches 133760 bytes.
Such a huge per-lcore structure significantly amplifies cross-NUMA
overhead in multi-port multi-NUMA deployment scenarios.
This commit refactors lcore_conf to pointer array and implements
per-lcore NUMA-aware hugepage allocation, allocating each lcore's
configuration on its local socket to eliminate remote memory access.
Signed-off-by: Chengwen Feng <[email protected]>
---
...
+}
+
+static int
+init_lcore_conf(void)
+{
+ unsigned int lcore_id;
+ int socketid;
+
+ for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
+ if (rte_lcore_is_enabled(lcore_id) == 0)
+ continue;
+
+ socketid = numa_on ? rte_lcore_to_socket_id(lcore_id) : 0;
Shouldn't it be SOCKET_ID_ANY (-1) instead of zero, when NUMA is disabled?
OK, already fix in v4
BTW: SOCKET_ID_ANY seemed need redefined as RTE_SOCKET_ID_ANY, If there is no
objection, I will make the changes in the next independent patch.
Yep, that's probably a good thing to do, and probably 26.11 is a good
time to do that.
BTW, I think it was discussed before, but I can't remember why we didn't
fix it so far.
Konstantin
Thanks,
Chengwen