XDP hardware hints discussion mail archive
 help / color / mirror / Atom feed
From: Jesper Dangaard Brouer <jbrouer@redhat.com>
To: Andrii Nakryiko <andrii@kernel.org>,
	Michal Swiatkowski <michal.swiatkowski@intel.com>,
	"Desouza, Ederson" <ederson.desouza@intel.com>,
	Alexander Lobakin <alobakin@pm.me>
Cc: brouer@redhat.com,
	"xdp-hints@xdp-project.net" <xdp-hints@xdp-project.net>,
	bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Toke Hoiland Jorgensen <toke@redhat.com>,
	John Fastabend <john.fastabend@gmail.com>
Subject: XDP-hints as BTF early design discussion phase
Date: Mon, 13 Sep 2021 13:35:04 +0200	[thread overview]
Message-ID: <6850bdde-b660-5ed3-9749-2fc6c1c1d0b7@redhat.com> (raw)

Trying to get started with XDP-hints again.

The fundamental idea is that XDP-hints metadata struct's are defined by 
the kernel, preferably by the kernel module, and described via BTF. As 
BTF layout is defined by kernel, this means userspace (AF_XDP) and 
BPF-progs must adapt to layout (used by running kernel). This imply that 
kernel is free to change layout.

The BTF ID is exposed (to BPF-prog and AF_XDP) on per packet basis, to 
give kernel more freedom to change layout runtime. This push 
responsibility to userspace/BPF-prog of handling different layouts, 
which seems natural. For the kernel this solves many issues around 
concurrency and NIC config changes that affects BTF info available (e.g. 
when BTF layout is allowed to change).

End-goal is to make it easier for kernel drivers can invent new layouts 
to suite new hardware features. Thus, we prefer a solution where 
XDP-hints metadata struct's are defined in the kernel module code.


(Idea below ... please let us know what you think, wrong direction?)

Exploring kernel module code defining the XDP-hints metadata struct.

Kernel module BTFs are now[1][2] exposed through sysfs as 
/sys/kernel/btf/<module-name>. Thus, userspace can use libbpf 
btf__load_module_btf() and others BTF APIs. Started playing here[3].

Credit to Toke, who had an idea that drivers could "say" what struct's 
are available, by defining a union with a known name e.g. 
metadata_hints_avail' and have supported metadata struct's included in 
that union. Then we don't need new APIs for exporting these BTF-metadata 
struct's. To find struct names, we BTF walk this union.


-Jesper

  [1] 
https://lore.kernel.org/bpf/20201110011932.3201430-5-andrii@kernel.org/
  [2] 36e68442d1af ("bpf: Load and verify kernel module BTFs") (Author: 
Andrii Nakryiko)
  [3] 
https://github.com/xdp-project/bpf-examples/blob/master/BTF-playground/



             reply	other threads:[~2021-09-13 11:35 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-13 11:35 Jesper Dangaard Brouer [this message]
     [not found] ` <20210914122231.1870-1-larysa.zaremba@intel.com>
2021-09-22  0:19   ` Andrii Nakryiko

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

  List information: https://lists.xdp-project.net/postorius/lists/xdp-hints.xdp-project.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6850bdde-b660-5ed3-9749-2fc6c1c1d0b7@redhat.com \
    --to=jbrouer@redhat.com \
    --cc=alobakin@pm.me \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=brouer@redhat.com \
    --cc=ederson.desouza@intel.com \
    --cc=john.fastabend@gmail.com \
    --cc=michal.swiatkowski@intel.com \
    --cc=toke@redhat.com \
    --cc=xdp-hints@xdp-project.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox