2020-10-11 19:35:50

by Tianxianting

[permalink] [raw]
Subject: [PATCH] net: Avoid allocing memory on memoryless numa node

In architecture like powerpc, we can have cpus without any local memory
attached to it. In such cases the node does not have real memory.

Use local_memory_node(), which is guaranteed to have memory.
local_memory_node is a noop in other architectures that does not support
memoryless nodes.

Signed-off-by: Xianting Tian <[email protected]>
---
net/core/dev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 266073e30..dcb4533ef 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2590,7 +2590,7 @@ static struct xps_map *expand_xps_map(struct xps_map *map, int attr_index,
new_map = kzalloc(XPS_MAP_SIZE(alloc_len), GFP_KERNEL);
else
new_map = kzalloc_node(XPS_MAP_SIZE(alloc_len), GFP_KERNEL,
- cpu_to_node(attr_index));
+ local_memory_node(cpu_to_node(attr_index)));
if (!new_map)
return NULL;

--
2.17.1


2020-10-12 02:11:21

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH] net: Avoid allocing memory on memoryless numa node

On Sun, 11 Oct 2020 12:11:40 +0800 Xianting Tian wrote:
> In architecture like powerpc, we can have cpus without any local memory
> attached to it. In such cases the node does not have real memory.
>
> Use local_memory_node(), which is guaranteed to have memory.
> local_memory_node is a noop in other architectures that does not support
> memoryless nodes.
>
> Signed-off-by: Xianting Tian <[email protected]>
> ---
> net/core/dev.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 266073e30..dcb4533ef 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -2590,7 +2590,7 @@ static struct xps_map *expand_xps_map(struct xps_map *map, int attr_index,
> new_map = kzalloc(XPS_MAP_SIZE(alloc_len), GFP_KERNEL);
> else
> new_map = kzalloc_node(XPS_MAP_SIZE(alloc_len), GFP_KERNEL,
> - cpu_to_node(attr_index));
> + local_memory_node(cpu_to_node(attr_index)));
> if (!new_map)
> return NULL;
>

Are we going to patch all kmalloc_node() callers now to apply
local_memory_node()? Can't the allocator take care of this?

2020-10-12 02:23:39

by Tianxianting

[permalink] [raw]
Subject: RE: [PATCH] net: Avoid allocing memory on memoryless numa node

Hi Jakub,
Thanks for your suggestion,
Let me try it :-)

-----Original Message-----
From: Jakub Kicinski [mailto:[email protected]]
Sent: Monday, October 12, 2020 3:18 AM
To: tianxianting (RD) <[email protected]>
Cc: [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH] net: Avoid allocing memory on memoryless numa node

On Sun, 11 Oct 2020 12:11:40 +0800 Xianting Tian wrote:
> In architecture like powerpc, we can have cpus without any local
> memory attached to it. In such cases the node does not have real memory.
>
> Use local_memory_node(), which is guaranteed to have memory.
> local_memory_node is a noop in other architectures that does not
> support memoryless nodes.
>
> Signed-off-by: Xianting Tian <[email protected]>
> ---
> net/core/dev.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/core/dev.c b/net/core/dev.c index
> 266073e30..dcb4533ef 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -2590,7 +2590,7 @@ static struct xps_map *expand_xps_map(struct xps_map *map, int attr_index,
> new_map = kzalloc(XPS_MAP_SIZE(alloc_len), GFP_KERNEL);
> else
> new_map = kzalloc_node(XPS_MAP_SIZE(alloc_len), GFP_KERNEL,
> - cpu_to_node(attr_index));
> + local_memory_node(cpu_to_node(attr_index)));
> if (!new_map)
> return NULL;
>

Are we going to patch all kmalloc_node() callers now to apply local_memory_node()? Can't the allocator take care of this?