[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJD7tkbd8qA-4goUCVW6Tf0xGpj2OSBXncpWhrWFn5y010oBMw@mail.gmail.com>
Date: Mon, 9 May 2022 18:04:34 -0700
From: Yosry Ahmed <yosryahmed@...gle.com>
To: Andrii Nakryiko <andrii.nakryiko@...il.com>
Cc: Feng zhou <zhoufeng.zf@...edance.com>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Andrii Nakryiko <andrii@...nel.org>, Martin Lau <kafai@...com>,
Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>,
john fastabend <john.fastabend@...il.com>,
KP Singh <kpsingh@...nel.org>,
Steven Rostedt <rostedt@...dmis.org>,
Ingo Molnar <mingo@...hat.com>, Jiri Olsa <jolsa@...nel.org>,
Dave Marchevsky <davemarchevsky@...com>,
Joanne Koong <joannekoong@...com>,
Geliang Tang <geliang.tang@...e.com>,
Networking <netdev@...r.kernel.org>, bpf <bpf@...r.kernel.org>,
open list <linux-kernel@...r.kernel.org>,
duanxiongchun@...edance.com,
Muchun Song <songmuchun@...edance.com>,
Dongdong Wang <wangdongdong.6@...edance.com>,
Cong Wang <cong.wang@...edance.com>,
zhouchengming@...edance.com
Subject: Re: [PATCH bpf-next] bpf: add bpf_map_lookup_percpu_elem for percpu map
On Mon, May 9, 2022 at 5:34 PM Andrii Nakryiko
<andrii.nakryiko@...il.com> wrote:
>
> On Fri, May 6, 2022 at 7:49 PM Feng zhou <zhoufeng.zf@...edance.com> wrote:
> >
> > From: Feng Zhou <zhoufeng.zf@...edance.com>
> >
> > Trace some functions, such as enqueue_task_fair, need to access the
> > corresponding cpu, not the current cpu, and bpf_map_lookup_elem percpu map
> > cannot do it. So add bpf_map_lookup_percpu_elem to accomplish it for
> > percpu_array_map, percpu_hash_map, lru_percpu_hash_map.
> >
> > The implementation method is relatively simple, refer to the implementation
> > method of map_lookup_elem of percpu map, increase the parameters of cpu, and
> > obtain it according to the specified cpu.
> >
>
> I don't think it's safe in general to access per-cpu data from another
> CPU. I'd suggest just having either a ARRAY_OF_MAPS or adding CPU ID
> as part of the key, if you need such a custom access pattern.
I actually just sent an RFC patch series containing a similar patch
for the exact same purpose. There are instances in the kernel where
per-cpu data is accessed from other cpus (e.g.
mem_cgroup_css_rstat_flush()). I believe, like any other variable,
percpu data can be safe or not safe to access, based on the access
pattern. It is up to the user to coordinate accesses to the variable.
For example, in my use case, one of the accessors only reads percpu
values of different cpus, so it should be safe. If a user accesses
percpu data of another cpu without guaranteeing safety, they corrupt
their own data. I understand that the main purpose of percpu data is
lockless (and therefore fast) access, but in some use cases the user
may be able to safely (and locklessly) access the data concurrently.
>
> > Signed-off-by: Feng Zhou <zhoufeng.zf@...edance.com>
> > ---
> > include/linux/bpf.h | 2 ++
> > include/uapi/linux/bpf.h | 9 +++++++++
> > kernel/bpf/arraymap.c | 15 +++++++++++++++
> > kernel/bpf/core.c | 1 +
> > kernel/bpf/hashtab.c | 32 ++++++++++++++++++++++++++++++++
> > kernel/bpf/helpers.c | 18 ++++++++++++++++++
> > kernel/bpf/verifier.c | 17 +++++++++++++++--
> > kernel/trace/bpf_trace.c | 2 ++
> > tools/include/uapi/linux/bpf.h | 9 +++++++++
> > 9 files changed, 103 insertions(+), 2 deletions(-)
> >
>
> [...]
Powered by blists - more mailing lists