From: "Burakov, Anatoly" <anatoly.burakov@intel.com>
To: Jesper Dangaard Brouer <brouer@redhat.com>, <bpf@vger.kernel.org>
Cc: netdev@vger.kernel.org, xdp-hints@xdp-project.net,
larysa.zaremba@intel.com, memxor@gmail.com,
Lorenzo Bianconi <lorenzo@kernel.org>,
mtahhan@redhat.com,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Daniel Borkmann <borkmann@iogearbox.net>,
Andrii Nakryiko <andrii.nakryiko@gmail.com>,
dave@dtucker.co.uk, Magnus Karlsson <magnus.karlsson@intel.com>,
bjorn@kernel.org
Subject: [xdp-hints] Re: [PATCH RFCv2 bpf-next 04/18] net: create xdp_hints_common and set functions
Date: Fri, 9 Sep 2022 11:49:20 +0100 [thread overview]
Message-ID: <f14c367b-fe4e-2956-b34e-8d54862a6393@intel.com> (raw)
In-Reply-To: <166256552083.1434226.577215984964402996.stgit@firesoul>
On 07-Sep-22 4:45 PM, Jesper Dangaard Brouer wrote:
> XDP-hints via BTF are about giving drivers the ability to extend the
> common set of hardware offload hints in a flexible way.
>
> This patch start out with defining the common set, based on what is
> used available in the SKB. Having this as a common struct in core
> vmlinux makes it easier to implement xdp_frame to SKB conversion
> routines as normal C-code, see later patches.
>
> Drivers can redefine the layout of the entire metadata area, but are
> encouraged to use this common struct as the base, on which they can
> extend on top for their extra hardware offload hints. When doing so,
> drivers can mark the xdp_buff (and xdp_frame) with flags indicating
> this it compatible with the common struct.
>
> Patch also provides XDP-hints driver helper functions for updating the
> common struct. Helpers gets inlined and are defined for maximum
> performance, which does require some extra care in drivers, e.g. to
> keep track of flags to reduce data dependencies, see code DOC.
>
> Userspace and BPF-prog's MUST not consider the common struct UAPI.
> The common struct (and enum flags) are only exposed via BTF, which
> implies consumers must read and decode this BTF before using/consuming
> data layout.
>
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> ---
> include/net/xdp.h | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> net/core/xdp.c | 5 ++
> 2 files changed, 152 insertions(+)
>
> diff --git a/include/net/xdp.h b/include/net/xdp.h
> index 04c852c7a77f..ea5836ccee82 100644
> --- a/include/net/xdp.h
> +++ b/include/net/xdp.h
> @@ -8,6 +8,151 @@
>
> #include <linux/skbuff.h> /* skb_shared_info */
>
> +/**
> + * struct xdp_hints_common - Common XDP-hints offloads shared with netstack
> + * @btf_full_id: The modules BTF object + type ID for specific struct
> + * @vlan_tci: Hardware provided VLAN tag + proto type in @xdp_hints_flags
> + * @rx_hash32: Hardware provided RSS hash value
> + * @xdp_hints_flags: see &enum xdp_hints_flags
> + *
> + * This structure contains the most commonly used hardware offloads hints
> + * provided by NIC drivers and supported by the SKB.
> + *
> + * Driver are expected to extend this structure by include &struct
> + * xdp_hints_common as part of the drivers own specific xdp_hints struct's, but
> + * at the end-of their struct given XDP metadata area grows backwards.
> + *
> + * The member @btf_full_id is populated by driver modules to uniquely identify
> + * the BTF struct. The high 32-bits store the modules BTF object ID and the
> + * lower 32-bit the BTF type ID within that BTF object.
> + */
> +struct xdp_hints_common {
> + union {
> + __wsum csum;
> + struct {
> + __u16 csum_start;
> + __u16 csum_offset;
> + };
> + };
> + u16 rx_queue;
> + u16 vlan_tci;
> + u32 rx_hash32;
> + u32 xdp_hints_flags;
> + u64 btf_full_id; /* BTF object + type ID */
> +} __attribute__((aligned(4))) __attribute__((packed));
I'm assuming any Tx metadata will have to go before the Rx checksum union?
> +
> +
> +/**
> + * enum xdp_hints_flags - flags used by &struct xdp_hints_common
> + *
> + * The &enum xdp_hints_flags have reserved the first 16 bits for common flags
> + * and drivers can introduce use their own flags bits from BIT(16). For
> + * BPF-progs to find these flags (via BTF) drivers should define an enum
> + * xdp_hints_flags_driver.
> + */
> +enum xdp_hints_flags {
> + HINT_FLAG_CSUM_TYPE_BIT0 = BIT(0),
> + HINT_FLAG_CSUM_TYPE_BIT1 = BIT(1),
> + HINT_FLAG_CSUM_TYPE_MASK = 0x3,
> +
> + HINT_FLAG_CSUM_LEVEL_BIT0 = BIT(2),
> + HINT_FLAG_CSUM_LEVEL_BIT1 = BIT(3),
> + HINT_FLAG_CSUM_LEVEL_MASK = 0xC,
> + HINT_FLAG_CSUM_LEVEL_SHIFT = 2,
> +
> + HINT_FLAG_RX_HASH_TYPE_BIT0 = BIT(4),
> + HINT_FLAG_RX_HASH_TYPE_BIT1 = BIT(5),
> + HINT_FLAG_RX_HASH_TYPE_MASK = 0x30,
> + HINT_FLAG_RX_HASH_TYPE_SHIFT = 0x4,
> +
> + HINT_FLAG_RX_QUEUE = BIT(7),
> +
> + HINT_FLAG_VLAN_PRESENT = BIT(8),
> + HINT_FLAG_VLAN_PROTO_ETH_P_8021Q = BIT(9),
> + HINT_FLAG_VLAN_PROTO_ETH_P_8021AD = BIT(10),
> + /* Flags from BIT(16) can be used by drivers */
If we assumed we also have Tx section, would 16 bits be enough? For a
basic implementation of UDP checksumming, AF_XDP would need 3x16 more
bits (to store L2/L3/L4 offsets) plus probably a flag field indicating
presence of each. Is there any way to expand common fields in the future
(or is it at all intended to be expandable)?
--
Thanks,
Anatoly
next prev parent reply other threads:[~2022-09-09 10:49 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-07 15:45 [xdp-hints] [PATCH RFCv2 bpf-next 00/18] XDP-hints: XDP gaining access to HW offload hints via BTF Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 01/18] libbpf: factor out BTF loading from load_module_btfs() Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 02/18] libbpf: try to load vmlinux BTF from the kernel first Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 03/18] libbpf: patch module BTF obj+type ID into BPF insns Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 04/18] net: create xdp_hints_common and set functions Jesper Dangaard Brouer
2022-09-09 10:49 ` Burakov, Anatoly [this message]
2022-09-09 14:13 ` [xdp-hints] " Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 05/18] net: add net_device feature flag for XDP-hints Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 06/18] xdp: controlling XDP-hints from BPF-prog via helper Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 07/18] i40e: Refactor i40e_ptp_rx_hwtstamp Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 08/18] i40e: refactor i40e_rx_checksum with helper Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 09/18] bpf: export btf functions for modules Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 10/18] btf: Add helper for kernel modules to lookup full BTF ID Jesper Dangaard Brouer
2022-09-07 15:45 ` [xdp-hints] [PATCH RFCv2 bpf-next 11/18] i40e: add XDP-hints handling Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 12/18] net: use XDP-hints in xdp_frame to SKB conversion Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 13/18] mvneta: add XDP-hints support Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 14/18] i40e: Add xdp_hints_union Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 15/18] ixgbe: enable xdp-hints Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 16/18] ixgbe: add rx timestamp xdp hints support Jesper Dangaard Brouer
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 17/18] xsk: AF_XDP xdp-hints support in desc options Jesper Dangaard Brouer
2022-09-08 8:06 ` [xdp-hints] " Magnus Karlsson
2022-09-08 10:10 ` Maryam Tahhan
2022-09-08 15:04 ` Jesper Dangaard Brouer
2022-09-09 6:43 ` Magnus Karlsson
2022-09-09 8:12 ` Maryam Tahhan
2022-09-09 9:42 ` Jesper Dangaard Brouer
2022-09-09 10:14 ` Magnus Karlsson
2022-09-09 12:35 ` Jesper Dangaard Brouer
2022-09-09 12:44 ` Magnus Karlsson
2022-09-07 15:46 ` [xdp-hints] [PATCH RFCv2 bpf-next 18/18] ixgbe: AF_XDP xdp-hints processing in ixgbe_clean_rx_irq_zc Jesper Dangaard Brouer
2022-09-08 9:30 ` [xdp-hints] Re: [PATCH RFCv2 bpf-next 00/18] XDP-hints: XDP gaining access to HW offload hints via BTF Alexander Lobakin
2022-09-09 13:48 ` Jesper Dangaard Brouer
2022-10-03 23:55 ` sdf
2022-10-04 9:29 ` Jesper Dangaard Brouer
2022-10-04 18:26 ` Stanislav Fomichev
2022-10-05 0:25 ` Martin KaFai Lau
2022-10-05 0:59 ` Jakub Kicinski
2022-10-05 1:02 ` Stanislav Fomichev
2022-10-05 1:24 ` Jakub Kicinski
2022-10-05 2:15 ` Stanislav Fomichev
2022-10-05 19:26 ` Martin KaFai Lau
2022-10-06 9:14 ` Magnus Karlsson
2022-10-06 15:29 ` Jesper Dangaard Brouer
2022-10-11 6:29 ` Martin KaFai Lau
2022-10-11 11:57 ` Jesper Dangaard Brouer
2022-10-05 10:06 ` Toke Høiland-Jørgensen
2022-10-05 18:47 ` sdf
2022-10-06 8:19 ` Maryam Tahhan
2022-10-06 17:22 ` sdf
2022-10-05 14:19 ` Jesper Dangaard Brouer
2022-10-06 14:59 ` Jakub Kicinski
2022-10-05 13:43 ` Jesper Dangaard Brouer
2022-10-05 16:29 ` Jesper Dangaard Brouer
2022-10-05 18:43 ` sdf
2022-10-06 17:47 ` Jesper Dangaard Brouer
2022-10-07 15:05 ` David Ahern
2022-10-05 13:14 ` Burakov, Anatoly
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=f14c367b-fe4e-2956-b34e-8d54862a6393@intel.com \
--to=anatoly.burakov@intel.com \
--cc=alexei.starovoitov@gmail.com \
--cc=andrii.nakryiko@gmail.com \
--cc=bjorn@kernel.org \
--cc=borkmann@iogearbox.net \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=dave@dtucker.co.uk \
--cc=larysa.zaremba@intel.com \
--cc=lorenzo@kernel.org \
--cc=magnus.karlsson@intel.com \
--cc=memxor@gmail.com \
--cc=mtahhan@redhat.com \
--cc=netdev@vger.kernel.org \
--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