From: "Jiayuan Chen" <jiayuan.chen@linux.dev>
To: "Cong Wang" <xiyou.wangcong@gmail.com>
Cc: bpf@vger.kernel.org, mrpre@163.com,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"John Fastabend" <john.fastabend@gmail.com>,
"KP Singh" <kpsingh@kernel.org>,
"Stanislav Fomichev" <sdf@fomichev.me>,
"Hao Luo" <haoluo@google.com>, "Jiri Olsa" <jolsa@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Jakub Sitnicki" <jakub@cloudflare.com>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Simon Horman" <horms@kernel.org>,
"Kuniyuki Iwashima" <kuniyu@amazon.com>,
"Willem de Bruijn" <willemb@google.com>,
"Mykola Lysenko" <mykolal@fb.com>,
"Shuah Khan" <shuah@kernel.org>,
"Jiapeng Chong" <jiapeng.chong@linux.alibaba.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: Re: [PATCH bpf-next v1 1/3] bpf, sockmap: Introduce a new kfunc for sockmap
Date: Tue, 29 Apr 2025 05:23:14 +0000 [thread overview]
Message-ID: <8a5d5b162a1462568c4d342c93896c919950cbe9@linux.dev> (raw)
In-Reply-To: <aBAjtATRrVNegYjm@pop-os.localdomain>
2025/4/29 08:56, "Cong Wang" <xiyou.wangcong@gmail.com> wrote:
>
> On Mon, Apr 28, 2025 at 04:16:52PM +0800, Jiayuan Chen wrote:
>
> >
> > +bpf_sk_skb_set_redirect_cpu()
> >
> > +^^^^^^^^^^^^^^^^^^^^^^
> >
> > +.. code-block:: c
> >
> > +
> >
> > + int bpf_sk_skb_set_redirect_cpu(struct __sk_buff *s, int redir_cpu)
> >
> > +
> >
> > +This kfunc ``bpf_sk_skb_set_redirect_cpu()`` is available to
> >
> > +``BPF_PROG_TYPE_SK_SKB`` BPF programs. It sets the CPU affinity, allowing the
> >
> > +sockmap packet redirecting process to run on the specified CPU as much as
> >
> > +possible, helping users reduce the interference between the sockmap redirecting
> >
> > +background thread and other threads.
> >
> > +
> >
>
> I am wondering if it is a better idea to use BPF_MAP_TYPE_CPUMAP for
>
> redirection here instead? Like we did for bpf_redirect_map(). At least
>
> we would not need to store CPU in psock with this approach.
>
> Thanks.
>
You mean to use BPF_MAP_TYPE_CPUMAP with XDP to redirect packets to a
specific CPU?
I tested and found such overhead:
1、Needing to parse the L4 header from the L2 header to obtain the 5-tuple,
and then maintaining an additional map to store the relationship between
each five-tuple and process/CPU. Compared to multi-process scenario, with
one process binding to one CPU and one map, I can directly use a global
variable to let the BPF program know which thread it should use, especially
for programs that enable reuseport.
2、Furthermore, regarding performance, I tested with cpumap and the results
were lower than expected. This is because loopback only has xdp_generic
mode and the problem I described in cover letter is actually occurred
on loopback...
Code:
'''
struct {
__uint(type, BPF_MAP_TYPE_CPUMAP);
__uint(key_size, sizeof(__u32));
__uint(value_size, sizeof(struct bpf_cpumap_val));
__uint(max_entries, 64);
} cpu_map SEC(".maps");
SEC("xdp")
int xdp_stats1_func(struct xdp_md *ctx)
{
/* Real world:
* 1. get 5-tuple from ctx
* 2. get corresponding cpu of current skb through XX_MAP
*/
int ret = bpf_redirect_map(&cpu_map, 3, 0); // redirct to 3
return ret;
}
'''
Result:
'''
./bench sockmap -c 2 -p 1 -a --rx-verdict-ingress --no-verify
Setting up benchmark 'sockmap'...
create socket fd c1:14 p1:15 c2:16 p2:17
Benchmark 'sockmap' started.
Iter 0 ( 36.439us): Send Speed 561.496 MB/s ... Rcv Speed 33.264 MB/s
Iter 1 ( -7.448us): Send Speed 558.443 MB/s ... Rcv Speed 32.611 MB/s
Iter 2 ( -2.245us): Send Speed 557.131 MB/s ... Rcv Speed 33.004 MB/s
Iter 3 ( -2.845us): Send Speed 547.374 MB/s ... Rcv Speed 33.331 MB/s
Iter 4 ( 0.745us): Send Speed 562.891 MB/s ... Rcv Speed 34.117 MB/s
Iter 5 ( -2.056us): Send Speed 560.994 MB/s ... Rcv Speed 33.069 MB/s
Iter 6 ( 5.343us): Send Speed 562.038 MB/s ... Rcv Speed 33.200 MB/s
'''
Instead, we can introduce a new kfunc to specify the CPU used by the
backlog running thread, which can avoid using XDP. After all, this is a
"problem" brought by the BPF L7 framework itself, and it's better to solve
it ourselves.
next prev parent reply other threads:[~2025-04-29 5:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-28 8:16 [PATCH bpf-next v1 0/3] bpf, sockmap: Improve performance with CPU affinity Jiayuan Chen
2025-04-28 8:16 ` [PATCH bpf-next v1 1/3] bpf, sockmap: Introduce a new kfunc for sockmap Jiayuan Chen
2025-04-29 0:56 ` Cong Wang
2025-04-29 5:23 ` Jiayuan Chen [this message]
2025-04-28 8:16 ` [PATCH bpf-next v1 2/3] bpf, sockmap: Affinitize workqueue to a specific CPU Jiayuan Chen
2025-04-28 8:16 ` [PATCH bpf-next v1 3/3] selftest/bpf/benchs: Add cpu-affinity for sockmap bench Jiayuan Chen
2025-04-29 23:26 ` [PATCH bpf-next v1 0/3] bpf, sockmap: Improve performance with CPU affinity Alexei Starovoitov
2025-04-29 23:47 ` Jiayuan Chen
2025-04-29 23:53 ` Alexei Starovoitov
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=8a5d5b162a1462568c4d342c93896c919950cbe9@linux.dev \
--to=jiayuan.chen@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=horms@kernel.org \
--cc=jakub@cloudflare.com \
--cc=jiapeng.chong@linux.alibaba.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mrpre@163.com \
--cc=mykolal@fb.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=willemb@google.com \
--cc=xiyou.wangcong@gmail.com \
--cc=yonghong.song@linux.dev \
/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.