All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ioana Ciocoi Radulescu <ruxandra.radulescu@nxp.com>
To: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Cc: Jesper Dangaard Brouer <brouer@redhat.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	"dsahern@gmail.com" <dsahern@gmail.com>,
	Camelia Alexandra Groza <camelia.groza@nxp.com>
Subject: RE: Explaining the XDP page-requirement (Was: [PATCH v2 net-next 0/8] dpaa2-eth: Introduce XDP support)
Date: Mon, 7 Jan 2019 10:49:25 +0000	[thread overview]
Message-ID: <AM0PR04MB499479E078D9E579067A60A794890@AM0PR04MB4994.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20190107104506.GA31188@apalos>

> -----Original Message-----
> From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Sent: Monday, January 7, 2019 12:45 PM
> To: Ioana Ciocoi Radulescu <ruxandra.radulescu@nxp.com>
> Cc: Jesper Dangaard Brouer <brouer@redhat.com>;
> netdev@vger.kernel.org; davem@davemloft.net; Ioana Ciornei
> <ioana.ciornei@nxp.com>; dsahern@gmail.com; Camelia Alexandra Groza
> <camelia.groza@nxp.com>
> Subject: Re: Explaining the XDP page-requirement (Was: [PATCH v2 net-next
> 0/8] dpaa2-eth: Introduce XDP support)
> 
> Hi Ioana,
> > > > Thanks a lot for the info, will look into this. Do you have any
> > > > pointers as to why the full page restriction exists in the first
> > > > place? Sorry if it's a dumb question, but I haven't found details on
> > > > this and I'd really like to understand it.
> > >
> > > Hi Ioana,
> > >
> > > I promised (offlist) that I would get back to you explaining the XDP
> > > page-requirement...
> > >
> > > There are several reasons for XDP to require frames are backed by a
> > > page.  It started out with a focus on gaining speed via simplicity.
> > >
> > > The overall requirement is: XDP frame in physical contigious memory
> > >  - which is a requirement from BPF Direct-Access, for validating
> correcness.
> > >  - Implying you cannot split packet data over several pages.
> > >
> > > An important part of the page-requirement is to allow creating SKB's
> > > outside the driver code.  This happen today in both cpumap and veth
> > > (when doing XDP_REDIRECT).  And we need to control and limit the
> > > variations, to avoid having to handle all kind of SKB schemes.
> > > Specifically we need enough tailroom for the skb-shared-info.
> > >
> > > In the beginning we had the requirement of: 1-page per XDP frame.
> > >  - Gave us a simplified memory model
> > >  - Allow us to not touch atomic refcnt on page (always 1)
> > >  - Fixed 256 bytes headroom
> > >  - This gave us a lot of tailroom, expanding tail was trivial.
> > >
> > > Eventually ixgbe+i40e force us to use a split-page model, allowing two
> > > frames per page.
> > >  - This started to complicate memory model
> > >  - This unfortunately gave issue of unknown tailroom, which killed the
> > >    tailroom expand option.
> > >  - Changes XDP headroom to be variable (192 or 256 bytes)
> > >
> > > E.g. I really want to allow bpf_xdp_adjust_tail() to *expand* the
> > > frame size, but after allowing the split-page model, we couldn't allow
> > > this easily.  And SKB alloc in cpumap/veth was also complicated by not
> > > knowing (implicit) xdp_frame "hard-end".  (We might have to extend
> > > xdp_buff with "data_hard_end").
> > >
> >
> > Thanks a lot, that's great info, especially for someone who hasn't followed
> > so closely xdp development from its beginning.
> >
> > I'll look into updating the dpaa2-eth driver to use one page per frame and
> > see how that goes.
> 
> If you have time, we can discuss merging whatever hardware features are
> not
> supported in the page_pool API and use that to allocate pages?

Sure. I'd like to first transition to plain page allocations instead of
napi_alloc_frag() and validate that's ok (I've been meaning to try that for
a while now but haven't got around to it yet), and then we can explore
how that might be integrated in page_pool.

Thanks,
Ioana

  reply	other threads:[~2019-01-07 10:49 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-26 16:27 [PATCH v2 net-next 0/8] dpaa2-eth: Introduce XDP support Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 1/8] dpaa2-eth: Add basic " Ioana Ciocoi Radulescu
2018-11-27 15:45   ` Camelia Alexandra Groza
2018-11-28 16:11   ` David Ahern
2018-11-26 16:27 ` [PATCH v2 net-next 2/8] dpaa2-eth: Allow XDP header adjustments Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 4/8] dpaa2-eth: Release buffers back to pool on XDP_DROP Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 3/8] dpaa2-eth: Move function Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 5/8] dpaa2-eth: Map Rx buffers as bidirectional Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 6/8] dpaa2-eth: Add support for XDP_TX Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 7/8] dpaa2-eth: Cleanup channel stats Ioana Ciocoi Radulescu
2018-11-26 16:27 ` [PATCH v2 net-next 8/8] dpaa2-eth: Add xdp counters Ioana Ciocoi Radulescu
2018-11-28 16:11   ` David Ahern
2018-11-28  0:24 ` [PATCH v2 net-next 0/8] dpaa2-eth: Introduce XDP support David Miller
2018-11-28  9:18   ` Ioana Ciocoi Radulescu
2018-11-28 16:10     ` David Ahern
2018-11-28 18:57     ` David Miller
2018-12-05 15:45 ` Jesper Dangaard Brouer
2018-12-07 16:54   ` Ioana Ciocoi Radulescu
2018-12-07 17:20     ` Ilias Apalodimas
2018-12-07 17:42       ` Ioana Ciocoi Radulescu
2018-12-07 17:51         ` Ilias Apalodimas
2018-12-07 18:07           ` Ioana Ciocoi Radulescu
2018-12-13 17:43             ` Ioana Ciocoi Radulescu
2018-12-13 18:47               ` Ilias Apalodimas
2018-12-21 15:31             ` Explaining the XDP page-requirement (Was: [PATCH v2 net-next 0/8] dpaa2-eth: Introduce XDP support) Jesper Dangaard Brouer
2019-01-07 10:34               ` Ioana Ciocoi Radulescu
2019-01-07 10:45                 ` Ilias Apalodimas
2019-01-07 10:49                   ` Ioana Ciocoi Radulescu [this message]
2019-01-07 10:53                     ` Ilias Apalodimas
2019-01-09 14:22               ` Madalin-cristian Bucur
2019-01-09 14:25                 ` Ilias Apalodimas

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=AM0PR04MB499479E078D9E579067A60A794890@AM0PR04MB4994.eurprd04.prod.outlook.com \
    --to=ruxandra.radulescu@nxp.com \
    --cc=brouer@redhat.com \
    --cc=camelia.groza@nxp.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@gmail.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=ioana.ciornei@nxp.com \
    --cc=netdev@vger.kernel.org \
    /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.