Message ID | 20201010084417.5400-1-tian.xianting@h3c.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | bpf: Avoid allocing memory on memoryless numa node | expand |
On Sat, Oct 10, 2020 at 1:55 AM Xianting Tian <tian.xianting@h3c.com> 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. ... > /* Have map->numa_node, but choose node of redirect target CPU */ > - numa = cpu_to_node(cpu); > + numa = local_memory_node(cpu_to_node(cpu)); There are so many calls to cpu_to_node() throughout the kernel. Are you going to convert all of them one patch at a time to the above sequence? Why not do this CONFIG_HAVE_MEMORYLESS_NODES in cpu_to_node() instead? and save the churn.
Thanks Alexei for your suggestion, I will try to do it. -----Original Message----- From: Alexei Starovoitov [mailto:alexei.starovoitov@gmail.com] Sent: Monday, October 12, 2020 9:21 AM To: tianxianting (RD) <tian.xianting@h3c.com> Cc: Alexei Starovoitov <ast@kernel.org>; Daniel Borkmann <daniel@iogearbox.net>; David S. Miller <davem@davemloft.net>; Jakub Kicinski <kuba@kernel.org>; Jesper Dangaard Brouer <hawk@kernel.org>; John Fastabend <john.fastabend@gmail.com>; Martin KaFai Lau <kafai@fb.com>; Song Liu <songliubraving@fb.com>; Yonghong Song <yhs@fb.com>; Andrii Nakryiko <andriin@fb.com>; KP Singh <kpsingh@chromium.org>; Network Development <netdev@vger.kernel.org>; bpf <bpf@vger.kernel.org>; LKML <linux-kernel@vger.kernel.org> Subject: Re: [PATCH] bpf: Avoid allocing memory on memoryless numa node On Sat, Oct 10, 2020 at 1:55 AM Xianting Tian <tian.xianting@h3c.com> 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. ... > /* Have map->numa_node, but choose node of redirect target CPU */ > - numa = cpu_to_node(cpu); > + numa = local_memory_node(cpu_to_node(cpu)); There are so many calls to cpu_to_node() throughout the kernel. Are you going to convert all of them one patch at a time to the above sequence? Why not do this CONFIG_HAVE_MEMORYLESS_NODES in cpu_to_node() instead? and save the churn.
diff --git a/kernel/bpf/cpumap.c b/kernel/bpf/cpumap.c index 6386b7bb9..2c885c00a 100644 --- a/kernel/bpf/cpumap.c +++ b/kernel/bpf/cpumap.c @@ -423,7 +423,7 @@ __cpu_map_entry_alloc(struct bpf_cpumap_val *value, u32 cpu, int map_id) struct xdp_bulk_queue *bq; /* Have map->numa_node, but choose node of redirect target CPU */ - numa = cpu_to_node(cpu); + numa = local_memory_node(cpu_to_node(cpu)); rcpu = kzalloc_node(sizeof(*rcpu), gfp, numa); if (!rcpu)
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 <tian.xianting@h3c.com> --- kernel/bpf/cpumap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)