diff options
author | Yonghong Song <yonghong.song@linux.dev> | 2023-12-21 19:17:34 -0800 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2024-01-03 21:08:25 -0800 |
commit | 9beda16c257d55213f70adee2f16d7f13a8502e1 (patch) | |
tree | 808b110d7b573d9567de037bfad6783898857d6c /kernel/bpf | |
parent | 417fa6d163df6f13fb2cfad5132eff354c8a472e (diff) | |
download | linux-9beda16c257d55213f70adee2f16d7f13a8502e1.tar.gz linux-9beda16c257d55213f70adee2f16d7f13a8502e1.tar.bz2 linux-9beda16c257d55213f70adee2f16d7f13a8502e1.zip |
bpf: Avoid unnecessary extra percpu memory allocation
Currently, for percpu memory allocation, say if the user
requests allocation size to be 32 bytes, the actually
calculated size will be 40 bytes and it further rounds
to 64 bytes, and eventually 64 bytes are allocated,
wasting 32-byte memory.
Change bpf_mem_alloc() to calculate the cache index
based on the user-provided allocation size so unnecessary
extra memory can be avoided.
Suggested-by: Hou Tao <houtao1@huawei.com>
Acked-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20231222031734.1288400-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel/bpf')
-rw-r--r-- | kernel/bpf/memalloc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/bpf/memalloc.c b/kernel/bpf/memalloc.c index aa0fbf000a12..288ec4a967d0 100644 --- a/kernel/bpf/memalloc.c +++ b/kernel/bpf/memalloc.c @@ -833,7 +833,9 @@ void notrace *bpf_mem_alloc(struct bpf_mem_alloc *ma, size_t size) if (!size) return NULL; - idx = bpf_mem_cache_idx(size + LLIST_NODE_SZ); + if (!ma->percpu) + size += LLIST_NODE_SZ; + idx = bpf_mem_cache_idx(size); if (idx < 0) return NULL; |