| From: |
| Alexei Starovoitov <alexei.starovoitov-AT-gmail.com> |
| To: |
| bpf-AT-vger.kernel.org |
| Subject: |
| [PATCH bpf-next 0/4] bpf,slab: Introduce bpf_arena_alloc() kfuncs |
| Date: |
| Fri, 29 May 2026 13:24:33 -0700 |
| Message-ID: |
| <20260529202438.16408-1-alexei.starovoitov@gmail.com> |
| Cc: |
| daniel-AT-iogearbox.net, andrii-AT-kernel.org, memxor-AT-gmail.com, eddyz87-AT-gmail.com, vbabka-AT-suse.cz, harry.yoo-AT-oracle.com, david-AT-kernel.org, tj-AT-kernel.org, roman.gushchin-AT-linux.dev, peterz-AT-infradead.org, linux-mm-AT-kvack.org |
| Archive-link: |
| Article |
From: Alexei Starovoitov <ast@kernel.org>
Let BPF programs and kernel allocate objects in bpf arena via
kvmalloc-style API: bpf_arena_alloc() kfunc.
Currently sched-ext BPF programs implement various allocators
as BPF programs on top of bpf_arena_alloc_pages() kfunc.
This is inefficient.
Recently sched-ext kernel core introduced scx_arena_alloc() backed
by gen_pool_alloc() to allocate arena memory too.
This is also inefficient and gen_pool_alloc() is not fast enough.
Hence adopt sheaves and slub as allocator.
See patch 3 for algorithm details.
Alexei Starovoitov (4):
slab: Introduce kmem_cache_alloc_nolock()
slub: Pass kmem_cache to alloc_slab_page()
bpf,slab: Add slub-backed allocator for bpf_arena
selftests/bpf: Add tests for arena slub-backed allocator
include/linux/bpf_defs.h | 13 +
include/linux/slab.h | 27 ++
kernel/bpf/Kconfig | 3 +
kernel/bpf/arena.c | 366 +++++++++++++++++-
mm/slab.h | 6 +-
mm/slab_common.c | 2 +-
mm/slub.c | 201 +++++++++-
.../selftests/bpf/prog_tests/arena_slab.c | 59 +++
.../prog_tests/arena_slab_freeptr_stale_pcs.c | 28 ++
.../testing/selftests/bpf/progs/arena_slab.c | 179 +++++++++
.../bpf/progs/arena_slab_freeptr_stale_pcs.c | 120 ++++++
11 files changed, 977 insertions(+), 27 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/arena_slab.c
create mode 100644 tools/testing/selftests/bpf/prog_tests/arena_slab_freeptr_stale_pcs.c
create mode 100644 tools/testing/selftests/bpf/progs/arena_slab.c
create mode 100644 tools/testing/selftests/bpf/progs/arena_slab_freeptr_stale_pcs.c
--
2.53.0-Meta