Re: [PATCH v6 04/21] mem: do not check for invalid socket ID
From: Burakov, Anatoly <hidden>
Date: 2018-09-27 13:22:06
On 27-Sep-18 2:14 PM, Alejandro Lucero wrote:
On Thu, Sep 27, 2018 at 11:41 AM Anatoly Burakov [off-list ref] wrote:quoted
We will be assigning "invalid" socket ID's to external heap, and malloc will now be able to verify if a supplied socket ID is in fact a valid one, rendering parameter checks for sockets obsolete. This changes the semantics of what we understand by "socket ID", so document the change in the release notes. Signed-off-by: Anatoly Burakov <redacted> --- doc/guides/rel_notes/release_18_11.rst | 7 +++++++ lib/librte_eal/common/eal_common_memzone.c | 8 +++++--- lib/librte_eal/common/malloc_heap.c | 2 +- lib/librte_eal/common/rte_malloc.c | 4 ---- 4 files changed, 13 insertions(+), 8 deletions(-)diff --git a/doc/guides/rel_notes/release_18_11.rstb/doc/guides/rel_notes/release_18_11.rst index 5fc71e208..6ee236302 100644--- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst@@ -98,6 +98,13 @@ API Changes users of memseg-walk-related functions, as they will now have to skip externally allocated segments in most cases if the intent is to onlyiterate over internal DPDK memory. + - ``socket_id`` parameter across the entire DPDK has gained additional + meaning, as some socket ID's will now be representing externally allocated + memory. No changes will be required for existing code as backwards + compatibility will be kept, and those who do not use this feature will not + see these extra socket ID's. Any new API's must not check socket ID + parameters themselves, and must instead leave it to the memory subsystem to + decide whether socket ID is a valid one. ABI Changes -----------diff --git a/lib/librte_eal/common/eal_common_memzone.cb/lib/librte_eal/common/eal_common_memzone.c index 7300fe05d..b7081afbf 100644--- a/lib/librte_eal/common/eal_common_memzone.c +++ b/lib/librte_eal/common/eal_common_memzone.c@@ -120,13 +120,15 @@ memzone_reserve_aligned_thread_unsafe(const char*name, size_t len, return NULL; } - if ((socket_id != SOCKET_ID_ANY) && - (socket_id >= RTE_MAX_NUMA_NODES || socket_id < 0)) { + if ((socket_id != SOCKET_ID_ANY) && socket_id < 0) {Should not it be better to use RTE_MAX_HEAP instead of removing the check?
First of all, maximum number of heaps should not concern the rest of the code - this is purely internal detail of rte_malloc. More importantly, socket ID is completely independent from number of heaps. Socket ID is incremented each time a new heap is created, and they are not reused. If you create and destroy a heap 100 times - you'll get 100 different socket ID's, even though max number of heaps is less than that.
quoted
rte_errno = EINVAL; return NULL; } - if (!rte_eal_has_hugepages()) + /* only set socket to SOCKET_ID_ANY if we aren't allocating for an + * external heap. + */ + if (!rte_eal_has_hugepages() && socket_id < RTE_MAX_NUMA_NODES) socket_id = SOCKET_ID_ANY; contig = (flags & RTE_MEMZONE_IOVA_CONTIG) != 0;diff --git a/lib/librte_eal/common/malloc_heap.cb/lib/librte_eal/common/malloc_heap.c index 1d1e35708..73e478076 100644--- a/lib/librte_eal/common/malloc_heap.c +++ b/lib/librte_eal/common/malloc_heap.c@@ -647,7 +647,7 @@ malloc_heap_alloc(const char *type, size_t size, intsocket_arg, if (size == 0 || (align && !rte_is_power_of_2(align))) return NULL; - if (!rte_eal_has_hugepages()) + if (!rte_eal_has_hugepages() && socket_arg < RTE_MAX_NUMA_NODES) socket_arg = SOCKET_ID_ANY; if (socket_arg == SOCKET_ID_ANY)diff --git a/lib/librte_eal/common/rte_malloc.cb/lib/librte_eal/common/rte_malloc.c index 73d6df31d..9ba1472c3 100644--- a/lib/librte_eal/common/rte_malloc.c +++ b/lib/librte_eal/common/rte_malloc.c@@ -47,10 +47,6 @@ rte_malloc_socket(const char *type, size_t size,unsigned int align, if (!rte_eal_has_hugepages()) socket_arg = SOCKET_ID_ANY; - /* Check socket parameter */ - if (socket_arg >= RTE_MAX_NUMA_NODES) - return NULL; -Sane than before. Better to keep the sanity check using RTE_MAX_HEAPS.
same as above :) -- Thanks, Anatoly