From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
Maciej Fijalkowski <maciej.fijalkowski@intel.com>,
Stanislav Fomichev <sdf@fomichev.me>,
Magnus Karlsson <magnus.karlsson@intel.com>,
nex.sw.ncis.osdt.itp.upstreaming@intel.com, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v3 09/18] page_pool: allow mixing PPs within one bulk
Date: Mon, 04 Nov 2024 17:22:21 +0100 [thread overview]
Message-ID: <87y11z7yv6.fsf@toke.dk> (raw)
In-Reply-To: <1c32ebcd-ae94-42fb-9b18-726da532161f@intel.com>
Alexander Lobakin <aleksander.lobakin@intel.com> writes:
> From: Toke Høiland-Jørgensen <toke@redhat.com>
> Date: Fri, 01 Nov 2024 14:09:59 +0100
>
>> Alexander Lobakin <aleksander.lobakin@intel.com> writes:
>>
>>> The main reason for this change was to allow mixing pages from different
>>> &page_pools within one &xdp_buff/&xdp_frame. Why not?
>>> Adjust xdp_return_frame_bulk() and page_pool_put_page_bulk(), so that
>>> they won't be tied to a particular pool. Let the latter create a
>>> separate bulk of pages which's PP is different and flush it recursively.
>>> This greatly optimizes xdp_return_frame_bulk(): no more hashtable
>>> lookups. Also make xdp_flush_frame_bulk() inline, as it's just one if +
>>> function call + one u32 read, not worth extending the call ladder.
>>>
>>> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
>>
>> Neat idea, but one comment, see below:
>
> [...]
>
>>> + if (sub.count)
>>> + page_pool_put_page_bulk(sub.q, sub.count, true);
>>> +
>>
>> In the worst case here, this function can recursively call itself
>> XDP_BULK_QUEUE_SIZE (=16) times. Which will blow ~2.5k of stack size,
>> and lots of function call overhead. I'm not saying this level of
>> recursion is likely to happen today, but who knows about future uses? So
>> why not make it iterative instead of recursive (same basic idea, but
>> some kind of 'goto begin', or loop, instead of the recursive call)?
>
> Oh, great idea!
> I was also unsure about the recursion here. Initially, I wanted header
> split frames, which usually have linear/header part from one PP and
> frag/payload part from second PP, to be efficiently recycled in bulks.
> Currently, it's not possible, as a bulk will look like [1, 2, 1, 2, ...]
> IOW will be flush every frame.
> But I realize the recursion is not really optimal here, just the first
> that came to my mind. I'll give you Suggested-by here (or
> Co-developed-by?), really liked your approach :>
Sure, co-developed-by SGTM :)
-Toke
next prev parent reply other threads:[~2024-11-04 16:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-30 16:51 [PATCH net-next v3 00/18] xdp: a fistful of generic changes (+libeth_xdp) Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 01/18] jump_label: export static_key_slow_{inc,dec}_cpuslocked() Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 02/18] skbuff: allow 2-4-argument skb_frag_dma_map() Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 03/18] unroll: add generic loop unroll helpers Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 04/18] bpf, xdp: constify some bpf_prog * function arguments Alexander Lobakin
2024-11-01 11:46 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 05/18] xdp, xsk: constify read-only arguments of some static inline helpers Alexander Lobakin
2024-11-01 11:47 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 06/18] xdp: allow attaching already registered memory model to xdp_rxq_info Alexander Lobakin
2024-11-01 11:51 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 07/18] xdp: register system page pool as an XDP memory model Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 08/18] page_pool: make page_pool_put_page_bulk() actually handle array of pages Alexander Lobakin
2024-11-01 11:55 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 09/18] page_pool: allow mixing PPs within one bulk Alexander Lobakin
2024-11-01 13:09 ` Toke Høiland-Jørgensen
2024-11-04 14:32 ` Alexander Lobakin
2024-11-04 16:22 ` Toke Høiland-Jørgensen [this message]
2024-10-30 16:51 ` [PATCH net-next v3 10/18] xdp: get rid of xdp_frame::mem.id Alexander Lobakin
2024-11-01 0:41 ` Jakub Kicinski
2024-11-04 14:36 ` Alexander Lobakin
2024-11-05 2:59 ` Jakub Kicinski
2024-11-01 13:13 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 11/18] xdp: add generic xdp_buff_add_frag() Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 12/18] xdp: add generic xdp_build_skb_from_buff() Alexander Lobakin
2024-11-01 13:18 ` Toke Høiland-Jørgensen
2024-11-04 14:39 ` Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 13/18] xsk: allow attaching XSk pool via xdp_rxq_info_reg_mem_model() Alexander Lobakin
2024-11-01 13:20 ` Toke Høiland-Jørgensen
2024-10-30 16:51 ` [PATCH net-next v3 14/18] xsk: make xsk_buff_add_frag really add a frag via __xdp_buff_add_frag() Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 15/18] xsk: add generic XSk &xdp_buff -> skb conversion Alexander Lobakin
2024-10-30 16:51 ` [PATCH net-next v3 16/18] xsk: add helper to get &xdp_desc's DMA and meta pointer in one go Alexander Lobakin
2024-10-30 16:52 ` [PATCH net-next v3 17/18] libeth: support native XDP and register memory model Alexander Lobakin
2024-10-30 16:52 ` [PATCH net-next v3 18/18] libeth: add a couple of XDP helpers (libeth_xdp) Alexander Lobakin
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=87y11z7yv6.fsf@toke.dk \
--to=toke@redhat.com \
--cc=aleksander.lobakin@intel.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.fijalkowski@intel.com \
--cc=magnus.karlsson@intel.com \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.osdt.itp.upstreaming@intel.com \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
/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.