From: Leon Hwang <leon.hwang@linux.dev>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, andrii@kernel.org, daniel@iogearbox.net,
Leon Hwang <leon.hwang@linux.dev>
Subject: [RFC PATCH bpf-next v2 0/3] bpf: Introduce BPF_F_CPU flag for percpu_array map
Date: Tue, 8 Jul 2025 00:04:01 +0800 [thread overview]
Message-ID: <20250707160404.64933-1-leon.hwang@linux.dev> (raw)
This patch set introduces the BPF_F_CPU flag for percpu_array maps, as
discussed in the thread of
"[PATCH bpf-next v3 0/4] bpf: Introduce global percpu data"[1].
The goal is to reduce data caching overhead in light skeletons by allowing
a single value to be reused across all CPUs. This avoids the M:N problem
where M cached values are used to update a map on N CPUs kernel.
The BPF_F_CPU flag is accompanied by a cpu field, which specifies the
target CPUs for the operation:
* For lookup operations: the flag and cpu field enable querying a value
on the specified CPU.
* For update operations:
* If cpu == (u32)~0, the provided value is copied to all CPUs.
* Otherwise, the value is copied to the specified CPU only.
Currently, this functionality is only supported for percpu_array maps.
Links:
[1] https://lore.kernel.org/bpf/20250526162146.24429-1-leon.hwang@linux.dev/
Changes:
RFC v1 -> RFC v2:
* Address comments from Andrii:
* Embed cpu to flags on kernel side.
* Change BPF_ALL_CPU macro to BPF_ALL_CPUS enum.
* Copy/update element within RCU protection.
* Update bpf_map_value_size() including BPF_F_CPU case.
* Use zero as default value to get cpu option.
* Update documents of APIs to be generic.
* Add size_t:0 to opts definitions.
* Update validate_map_op() including BPF_F_CPU case.
* Use LIBBPF_OPTS instead of DECLARE_LIBBPF_OPTS.
Leon Hwang (3):
bpf: Introduce BPF_F_CPU flag for percpu_array map
bpf, libbpf: Support BPF_F_CPU for percpu_array map
selftests/bpf: Add case to test BPF_F_CPU
include/linux/bpf.h | 3 +-
include/uapi/linux/bpf.h | 7 +
kernel/bpf/arraymap.c | 56 ++++--
kernel/bpf/syscall.c | 52 ++++--
tools/include/uapi/linux/bpf.h | 7 +
tools/lib/bpf/bpf.c | 23 +++
tools/lib/bpf/bpf.h | 36 +++-
tools/lib/bpf/libbpf.c | 58 +++++-
tools/lib/bpf/libbpf.h | 53 +++++-
tools/lib/bpf/libbpf.map | 4 +
tools/lib/bpf/libbpf_common.h | 14 ++
.../selftests/bpf/prog_tests/percpu_alloc.c | 170 ++++++++++++++++++
.../selftests/bpf/progs/percpu_array_flag.c | 24 +++
13 files changed, 460 insertions(+), 47 deletions(-)
create mode 100644 tools/testing/selftests/bpf/progs/percpu_array_flag.c
--
2.50.0
next reply other threads:[~2025-07-07 16:04 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-07 16:04 Leon Hwang [this message]
2025-07-07 16:04 ` [RFC PATCH bpf-next v2 1/3] bpf: Introduce BPF_F_CPU flag for percpu_array map Leon Hwang
2025-07-11 18:10 ` Andrii Nakryiko
2025-07-14 12:47 ` Leon Hwang
2025-07-07 16:04 ` [RFC PATCH bpf-next v2 2/3] bpf, libbpf: Support BPF_F_CPU " Leon Hwang
2025-07-11 18:10 ` Andrii Nakryiko
2025-07-14 12:48 ` Leon Hwang
2025-07-07 16:04 ` [RFC PATCH bpf-next v2 3/3] selftests/bpf: Add case to test BPF_F_CPU Leon Hwang
2025-07-11 18:11 ` Andrii Nakryiko
2025-07-14 12:49 ` Leon Hwang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250707160404.64933-1-leon.hwang@linux.dev \
--to=leon.hwang@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.