From: Joe Damato <jdamato@fastly.com>
To: Yonghong Song <yhs@meta.com>
Cc: bpf@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, ast@kernel.org,
edumazet@google.com, martin.lau@linux.dev, song@kernel.org,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
jolsa@kernel.org, haoluo@google.com
Subject: Re: [PATCH bpf-next] bpf: Export rx queue info for reuseport ebpf prog
Date: Thu, 25 May 2023 07:35:08 -0700 [thread overview]
Message-ID: <20230525143508.GA21064@fastly.com> (raw)
In-Reply-To: <26c90595-f45e-a813-d538-0892c3ef2424@meta.com>
On Wed, May 24, 2023 at 10:26:32PM -0700, Yonghong Song wrote:
>
>
> On 5/24/23 8:37 PM, Joe Damato wrote:
> >BPF_PROG_TYPE_SK_REUSEPORT / sk_reuseport ebpf programs do not have
> >access to the queue_mapping or napi_id of the incoming skb. Having
> >this information can help ebpf progs determine which listen socket to
> >select.
> >
> >This patch exposes both queue_mapping and napi_id so that
> >sk_reuseport ebpf programs can use this information to direct incoming
> >connections to the correct listen socket in the SOCKMAP.
> >
> >For example:
> >
> >A multi-threaded userland program with several threads accepting client
> >connections via a reuseport listen socket group might want to direct
> >incoming connections from specific receive queues (or NAPI IDs) to specific
> >listen sockets to maximize locality or for use with epoll busy-poll.
> >
> >Signed-off-by: Joe Damato <jdamato@fastly.com>
> >---
> > include/uapi/linux/bpf.h | 2 ++
> > net/core/filter.c | 10 ++++++++++
> > 2 files changed, 12 insertions(+)
> >
> >diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> >index 9273c654743c..31560b506535 100644
> >--- a/include/uapi/linux/bpf.h
> >+++ b/include/uapi/linux/bpf.h
> >@@ -6286,6 +6286,8 @@ struct sk_reuseport_md {
> > */
> > __u32 eth_protocol;
> > __u32 ip_protocol; /* IP protocol. e.g. IPPROTO_TCP, IPPROTO_UDP */
> >+ __u32 rx_queue_mapping; /* Rx queue associated with the skb */
> >+ __u32 napi_id; /* napi id associated with the skb */
> > __u32 bind_inany; /* Is sock bound to an INANY address? */
> > __u32 hash; /* A hash of the packet 4 tuples */
>
> This won't work. You will need to append to the end of data structure
> to keep it backward compatibility.
>
> Also, recent kernel has a kfunc bpf_cast_to_kern_ctx() which converts
> a ctx to a kernel ctx and you can then use tracing-coding-style to
> access those fields. In this particular case, you can do
>
> struct sk_reuseport_kern *kctx = bpf_cast_to_kern_ctx(ctx);
>
> We have
>
> struct sk_reuseport_kern {
> struct sk_buff *skb;
> struct sock *sk;
> struct sock *selected_sk;
> struct sock *migrating_sk;
> void *data_end;
> u32 hash;
> u32 reuseport_id;
> bool bind_inany;
> };
>
> through sk and skb pointer, you should be access the fields presented in
> this patch. You can access more fields too.
>
> So using bpf_cast_to_kern_ctx(), there is no need for more uapi changes.
> Please give a try.
Thanks! I was looking at an LTS kernel tree that didn't have
bpf_cast_to_kern_ctx; this is very helpful and definitely a better way to
go.
Sorry for the noise.
prev parent reply other threads:[~2023-05-25 14:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-25 3:37 [PATCH bpf-next] bpf: Export rx queue info for reuseport ebpf prog Joe Damato
2023-05-25 5:26 ` Yonghong Song
2023-05-25 14:35 ` Joe Damato [this message]
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=20230525143508.GA21064@fastly.com \
--to=jdamato@fastly.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=netdev@vger.kernel.org \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=yhs@meta.com \
/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.