patches for DPDK stable branches
 help / color / Atom feed
* [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel
@ 2020-10-12 19:22 Nick Connolly
  2020-10-13  9:42 ` Burakov, Anatoly
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Connolly @ 2020-10-12 19:22 UTC (permalink / raw)
  To: Anatoly Burakov, David Marchand, Olivier Matz, Didier Pallard,
	Nicolas Dichtel
  Cc: dev, Nick Connolly, stable

Running dpdk-helloworld on Linux with lib numa present,
but no kernel support for NUMA (CONFIG_NUMA=n) causes
ret_service_init() to fail with EAL: error allocating
rte services array.

alloc_seg() calls get_mempolicy to verify that the allocation
has happened on the correct socket, but receives ENOSYS from
the kernel and fails the allocation.

The allocated socket should only be verified if check_numa() is true.

Fixes: 2a96c88be83e ("mem: ease init in a docker container")
Cc: nicolas.dichtel@6wind.com
Cc: stable@dpdk.org

Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
---
v2:
* Remove unnecessary debug message and add explanatory comment

 lib/librte_eal/linux/eal_memalloc.c | 30 ++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/librte_eal/linux/eal_memalloc.c
index 40a5c4aa1..6dc1b2bae 100644
--- a/lib/librte_eal/linux/eal_memalloc.c
+++ b/lib/librte_eal/linux/eal_memalloc.c
@@ -625,17 +625,25 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id,
 	}
 
 #ifdef RTE_EAL_NUMA_AWARE_HUGEPAGES
-	ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
-			    MPOL_F_NODE | MPOL_F_ADDR);
-	if (ret < 0) {
-		RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
-			__func__, strerror(errno));
-		goto mapped;
-	} else if (cur_socket_id != socket_id) {
-		RTE_LOG(DEBUG, EAL,
-				"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
-			__func__, socket_id, cur_socket_id);
-		goto mapped;
+	/*
+	 * If the kernel has been built without NUMA support, get_mempolicy()
+	 * will return an error. If check_numa() returns false, memory
+	 * allocation is not NUMA aware and the socket_id should not be
+	 * checked.
+	 */
+	if (check_numa()) {
+		ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
+					MPOL_F_NODE | MPOL_F_ADDR);
+		if (ret < 0) {
+			RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
+				__func__, strerror(errno));
+			goto mapped;
+		} else if (cur_socket_id != socket_id) {
+			RTE_LOG(DEBUG, EAL,
+					"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
+				__func__, socket_id, cur_socket_id);
+			goto mapped;
+		}
 	}
 #else
 	if (rte_socket_count() > 1)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel
  2020-10-12 19:22 [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel Nick Connolly
@ 2020-10-13  9:42 ` Burakov, Anatoly
  0 siblings, 0 replies; 5+ messages in thread
From: Burakov, Anatoly @ 2020-10-13  9:42 UTC (permalink / raw)
  To: Nick Connolly, David Marchand, Olivier Matz, Didier Pallard,
	Nicolas Dichtel
  Cc: dev, stable

On 12-Oct-20 8:22 PM, Nick Connolly wrote:
> Running dpdk-helloworld on Linux with lib numa present,
> but no kernel support for NUMA (CONFIG_NUMA=n) causes
> ret_service_init() to fail with EAL: error allocating
> rte services array.
> 
> alloc_seg() calls get_mempolicy to verify that the allocation
> has happened on the correct socket, but receives ENOSYS from
> the kernel and fails the allocation.
> 
> The allocated socket should only be verified if check_numa() is true.
> 
> Fixes: 2a96c88be83e ("mem: ease init in a docker container")
> Cc: nicolas.dichtel@6wind.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
> ---

Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

-- 
Thanks,
Anatoly

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel
  2020-10-13  7:59   ` Nicolas Dichtel
@ 2020-10-13 12:01     ` David Marchand
  0 siblings, 0 replies; 5+ messages in thread
From: David Marchand @ 2020-10-13 12:01 UTC (permalink / raw)
  To: Nick Connolly
  Cc: Nicolas Dichtel, Anatoly Burakov, Didier Pallard, Olivier Matz,
	dev, dpdk stable

On Tue, Oct 13, 2020 at 10:00 AM Nicolas Dichtel
<nicolas.dichtel@6wind.com> wrote:
>
> Le 12/10/2020 à 21:28, Nick Connolly a écrit :
> > Running dpdk-helloworld on Linux with lib numa present,
> > but no kernel support for NUMA (CONFIG_NUMA=n) causes
> > ret_service_init() to fail with EAL: error allocating
> > rte services array.
> >
> > alloc_seg() calls get_mempolicy to verify that the allocation
> > has happened on the correct socket, but receives ENOSYS from
> > the kernel and fails the allocation.
> >
> > The allocated socket should only be verified if check_numa() is true.
> >
> > Fixes: 2a96c88be83e ("mem: ease init in a docker container")
> > Cc: nicolas.dichtel@6wind.com
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
> Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

Applied, thanks Nick.

-- 
David Marchand


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel
  2020-10-12 19:28 ` [dpdk-stable] [PATCH v2] " Nick Connolly
@ 2020-10-13  7:59   ` Nicolas Dichtel
  2020-10-13 12:01     ` David Marchand
  0 siblings, 1 reply; 5+ messages in thread
From: Nicolas Dichtel @ 2020-10-13  7:59 UTC (permalink / raw)
  To: Nick Connolly, Anatoly Burakov, Didier Pallard, Olivier Matz,
	David Marchand
  Cc: dev, stable

Le 12/10/2020 à 21:28, Nick Connolly a écrit :
> Running dpdk-helloworld on Linux with lib numa present,
> but no kernel support for NUMA (CONFIG_NUMA=n) causes
> ret_service_init() to fail with EAL: error allocating
> rte services array.
> 
> alloc_seg() calls get_mempolicy to verify that the allocation
> has happened on the correct socket, but receives ENOSYS from
> the kernel and fails the allocation.
> 
> The allocated socket should only be verified if check_numa() is true.
> 
> Fixes: 2a96c88be83e ("mem: ease init in a docker container")
> Cc: nicolas.dichtel@6wind.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel
  2020-08-05 12:26 [dpdk-stable] [PATCH] " Nick Connolly
@ 2020-10-12 19:28 ` " Nick Connolly
  2020-10-13  7:59   ` Nicolas Dichtel
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Connolly @ 2020-10-12 19:28 UTC (permalink / raw)
  To: Anatoly Burakov, Didier Pallard, Olivier Matz, Nicolas Dichtel,
	David Marchand
  Cc: dev, Nick Connolly, stable

Running dpdk-helloworld on Linux with lib numa present,
but no kernel support for NUMA (CONFIG_NUMA=n) causes
ret_service_init() to fail with EAL: error allocating
rte services array.

alloc_seg() calls get_mempolicy to verify that the allocation
has happened on the correct socket, but receives ENOSYS from
the kernel and fails the allocation.

The allocated socket should only be verified if check_numa() is true.

Fixes: 2a96c88be83e ("mem: ease init in a docker container")
Cc: nicolas.dichtel@6wind.com
Cc: stable@dpdk.org

Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
---
v2:
* Remove unnecessary debug message and add explanatory comment

 lib/librte_eal/linux/eal_memalloc.c | 30 ++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/librte_eal/linux/eal_memalloc.c
index 40a5c4aa1..6dc1b2bae 100644
--- a/lib/librte_eal/linux/eal_memalloc.c
+++ b/lib/librte_eal/linux/eal_memalloc.c
@@ -625,17 +625,25 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id,
 	}
 
 #ifdef RTE_EAL_NUMA_AWARE_HUGEPAGES
-	ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
-			    MPOL_F_NODE | MPOL_F_ADDR);
-	if (ret < 0) {
-		RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
-			__func__, strerror(errno));
-		goto mapped;
-	} else if (cur_socket_id != socket_id) {
-		RTE_LOG(DEBUG, EAL,
-				"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
-			__func__, socket_id, cur_socket_id);
-		goto mapped;
+	/*
+	 * If the kernel has been built without NUMA support, get_mempolicy()
+	 * will return an error. If check_numa() returns false, memory
+	 * allocation is not NUMA aware and the socket_id should not be
+	 * checked.
+	 */
+	if (check_numa()) {
+		ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
+					MPOL_F_NODE | MPOL_F_ADDR);
+		if (ret < 0) {
+			RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
+				__func__, strerror(errno));
+			goto mapped;
+		} else if (cur_socket_id != socket_id) {
+			RTE_LOG(DEBUG, EAL,
+					"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
+				__func__, socket_id, cur_socket_id);
+			goto mapped;
+		}
 	}
 #else
 	if (rte_socket_count() > 1)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-12 19:22 [dpdk-stable] [PATCH v2] mem: fix allocation failure on non-NUMA kernel Nick Connolly
2020-10-13  9:42 ` Burakov, Anatoly
  -- strict thread matches above, loose matches on Subject: below --
2020-08-05 12:26 [dpdk-stable] [PATCH] " Nick Connolly
2020-10-12 19:28 ` [dpdk-stable] [PATCH v2] " Nick Connolly
2020-10-13  7:59   ` Nicolas Dichtel
2020-10-13 12:01     ` David Marchand

patches for DPDK stable branches

Archives are clonable:
	git clone --mirror http://inbox.dpdk.org/stable/0 stable/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 stable stable/ http://inbox.dpdk.org/stable \
		stable@dpdk.org
	public-inbox-index stable


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.stable


AGPL code for this site: git clone https://public-inbox.org/ public-inbox