All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislav Fomichev <sdf@google.com>
To: Larysa Zaremba <larysa.zaremba@intel.com>
Cc: bpf@vger.kernel.org, Martin KaFai Lau <martin.lau@linux.dev>,
	 Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	 Andrii Nakryiko <andrii@kernel.org>, Song Liu <song@kernel.org>,
	 Yonghong Song <yonghong.song@linux.dev>,
	John Fastabend <john.fastabend@gmail.com>,
	 KP Singh <kpsingh@kernel.org>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>,
	 linux-kernel@vger.kernel.org,
	 Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Subject: Re: [PATCH bpf-next] selftests/bpf: add options and frags to xdp_hw_metadata
Date: Tue, 10 Oct 2023 09:04:47 -0700	[thread overview]
Message-ID: <ZSV2HwOhuNr3XLbv@google.com> (raw)
In-Reply-To: <ZST8OTwh+6y1S170@lzaremba-mobl.ger.corp.intel.com>

On 10/10, Larysa Zaremba wrote:
> On Mon, Oct 09, 2023 at 09:49:54AM -0700, Stanislav Fomichev wrote:
> > On 10/09, Larysa Zaremba wrote:
> > > This is a follow-up to the commit 9b2b86332a9b ("bpf: Allow to use kfunc
> > > XDP hints and frags together").
> > > 
> > > The are some possible implementations problems that may arise when
> > > providing metadata specifically for multi-buffer packets, therefore there
> > > must be a possibility to test such option separately.
> > > 
> > > Add an option to use multi-buffer AF_XDP xdp_hw_metadata and mark used XDP
> > > program as capable to use frags.
> > > 
> > > As for now, xdp_hw_metadata accepts no options, so add simple option
> > > parsing logic and a help message.
> > > 
> > > For quick reference, also add an ingress packet generation command to the
> > > help message. The command comes from [0].
> > > 
> > > Example of output for multi-buffer packet:
> > > 
> > > xsk_ring_cons__peek: 1
> > > 0xead018: rx_desc[15]->addr=10000000000f000 addr=f100 comp_addr=f000
> > > rx_hash: 0x5789FCBB with RSS type:0x29
> > > rx_timestamp:  1696856851535324697 (sec:1696856851.5353)
> > > XDP RX-time:   1696856843158256391 (sec:1696856843.1583)
> > > 	delta sec:-8.3771 (-8377068.306 usec)
> > > AF_XDP time:   1696856843158413078 (sec:1696856843.1584)
> > > 	delta sec:0.0002 (156.687 usec)
> > > 0xead018: complete idx=23 addr=f000
> > > xsk_ring_cons__peek: 1
> > > 0xead018: rx_desc[16]->addr=100000000008000 addr=8100 comp_addr=8000
> > > 0xead018: complete idx=24 addr=8000
> > > xsk_ring_cons__peek: 1
> > > 0xead018: rx_desc[17]->addr=100000000009000 addr=9100 comp_addr=9000 EoP
> > > 0xead018: complete idx=25 addr=9000
> > > 
> > > Metadata is printed for the first packet only.
> > > 
> > > [0] https://lore.kernel.org/all/20230119221536.3349901-18-sdf@google.com/
> > > 
> > > Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
> > > ---
> > >  .../selftests/bpf/progs/xdp_hw_metadata.c     |  2 +-
> > >  tools/testing/selftests/bpf/xdp_hw_metadata.c | 92 ++++++++++++++++---
> > >  2 files changed, 79 insertions(+), 15 deletions(-)
> > > 
> > > diff --git a/tools/testing/selftests/bpf/progs/xdp_hw_metadata.c b/tools/testing/selftests/bpf/progs/xdp_hw_metadata.c
> > > index 63d7de6c6bbb..8767d919c881 100644
> > > --- a/tools/testing/selftests/bpf/progs/xdp_hw_metadata.c
> > > +++ b/tools/testing/selftests/bpf/progs/xdp_hw_metadata.c
> > > @@ -21,7 +21,7 @@ extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx,
> > >  extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
> > >  				    enum xdp_rss_hash_type *rss_type) __ksym;
> > >  
> > > -SEC("xdp")
> > > +SEC("xdp.frags")
> > >  int rx(struct xdp_md *ctx)
> > >  {
> > >  	void *data, *data_meta, *data_end;
> > > diff --git a/tools/testing/selftests/bpf/xdp_hw_metadata.c b/tools/testing/selftests/bpf/xdp_hw_metadata.c
> > > index 17c980138796..25225720346b 100644
> > > --- a/tools/testing/selftests/bpf/xdp_hw_metadata.c
> > > +++ b/tools/testing/selftests/bpf/xdp_hw_metadata.c
> > > @@ -26,6 +26,7 @@
> > >  #include <linux/sockios.h>
> > >  #include <sys/mman.h>
> > >  #include <net/if.h>
> > > +#include <ctype.h>
> > >  #include <poll.h>
> > >  #include <time.h>
> > >  
> > > @@ -49,19 +50,29 @@ struct xsk {
> > >  struct xdp_hw_metadata *bpf_obj;
> > >  struct xsk *rx_xsk;
> > >  const char *ifname;
> > > +bool use_frags;
> > >  int ifindex;
> > >  int rxq;
> > >  
> > >  void test__fail(void) { /* for network_helpers.c */ }
> > >  
> > > -static int open_xsk(int ifindex, struct xsk *xsk, __u32 queue_id)
> > > +static struct xsk_socket_config gen_socket_config(void)
> > >  {
> > > -	int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE;
> > > -	const struct xsk_socket_config socket_config = {
> > > +	struct xsk_socket_config socket_config = {
> > >  		.rx_size = XSK_RING_PROD__DEFAULT_NUM_DESCS,
> > >  		.tx_size = XSK_RING_PROD__DEFAULT_NUM_DESCS,
> > >  		.bind_flags = XDP_COPY,
> > >  	};
> > > +
> > > +	if (use_frags)
> > > +		socket_config.bind_flags |= XDP_USE_SG;
> > > +	return socket_config;
> > > +}
> > 
> > nit: why not drop const from socket_config and add this 'if (use_frags)'
> > directly to open_xsk? Not sure separate function really buys us anything?
> >
> 
> Considering there will also be ZC/copy option, I thought it would be good to 
> separate socket config creation. After giving this a sencond thought though, 
> for now options would control bind_flags only. What do you this about removing 
> gen_socket_config(), but introducing get_bind_flags()?

In my pending series [0] I ended up adding bind_flags argument
to open_xsk. Maybe do the same here? This also lets you drop
global use_frags (if you move option parsing directly into main).

Or maybe add global bind_flags if you want to keep separate parsing
routine (read_args)? Doesn't seem like we get anything by storing
separate use_flags/use_copy and then construct bind_flags via extra
get_bind_flags()?
 
0: https://lore.kernel.org/bpf/20231003200522.1914523-10-sdf@google.com/

  reply	other threads:[~2023-10-10 16:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-09 16:05 [PATCH bpf-next] selftests/bpf: add options and frags to xdp_hw_metadata Larysa Zaremba
2023-10-09 16:49 ` Stanislav Fomichev
2023-10-10  7:24   ` Larysa Zaremba
2023-10-10 16:04     ` Stanislav Fomichev [this message]
2023-10-10 16:35       ` Larysa Zaremba

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=ZSV2HwOhuNr3XLbv@google.com \
    --to=sdf@google.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=larysa.zaremba@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maciej.fijalkowski@intel.com \
    --cc=martin.lau@linux.dev \
    --cc=song@kernel.org \
    --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.