From: David Howells <dhowells@redhat.com>
To: Eric Dumazet <edumazet@google.com>
Cc: dhowells@redhat.com, netdev@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
Matthew Wilcox <willy@infradead.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Christoph Hellwig <hch@infradead.org>,
Jens Axboe <axboe@kernel.dk>, Jeff Layton <jlayton@kernel.org>,
Christian Brauner <brauner@kernel.org>,
Chuck Lever III <chuck.lever@oracle.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH net-next v5 00/19] splice, net: Replace sendpage with sendmsg(MSG_SPLICE_PAGES), part 1
Date: Thu, 06 Apr 2023 11:56:35 +0100 [thread overview]
Message-ID: <3636418.1680778595@warthog.procyon.org.uk> (raw)
In-Reply-To: <CANn89iLFc3gxo-5gEn36VFYdocXQPiAqRsTPEHcB8JA3mw8+8g@mail.gmail.com>
Eric Dumazet <edumazet@google.com> wrote:
> > Here's the first tranche of patches towards providing a MSG_SPLICE_PAGES
> > internal sendmsg flag that is intended to replace the ->sendpage() op with
> > calls to sendmsg(). MSG_SPLICE is a hint that tells the protocol that it
> > should splice the pages supplied if it can and copy them if not.
> >
>
> I find this patch series quite big/risky for 6.4
If you want me to hold this till after the merge window, that's fine.
> Can you spell out why we need "unspliceable pages support" ?
> This seems to add quite a lot of code in fast paths.
The patches to copy unspliceable pages (patches 6, 14 and 19) only really add
to the MSG_SPLICE_PAGES path - I don't know whether you count this as a fast
path or not. (Or are you objecting to MSG_SPLICE_PAGES and getting rid of
sendpage in general?)
What I'm trying to do with this aspect is twofold:
Firstly, I'm trying to make it such that the layer above can send each
message in a single sendmsg() if possible. This is possible with sunrpc and
siw, for example, but currently they make a whole bunch of separate calls into
the transport layer - typically at least three for header, body, trailer.
Secondly, I'm trying to avoid a double copy. The layer above TCP/UDP/etc
(sunrpc[*], siw, etc.) needs to glue protocol bits on either end of the
message body and it may have this data in the slab or on the stack - which it
would then need to copy into a page fragment so that it can be zero-copied.
However, if the device can handle this or we don't have sufficient frags, the
network layer may decide to copy it anyway - I'm not sure how the higher layer
can determine this.
It just seems there are fewer places this is required if it can be done in the
network protocol. Note that userspace cannot make use of this since they're
not allowed to set MSG_SPLICE_PAGES.
However, I have kept these bits separate and discard them if it's considered a
bad idea and that MSG_SPLICE_PAGES should, say, give an error in such a case.
David
[*] sunrpc, at least, seems to store the header and trailer in zerocopyable
pages, but has an additional bit on the front that's not.
prev parent reply other threads:[~2023-04-06 10:56 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-06 9:42 David Howells
2023-04-06 9:42 ` [PATCH net-next v5 01/19] net: Declare MSG_SPLICE_PAGES internal sendmsg() flag David Howells
2023-04-06 9:42 ` [PATCH net-next v5 02/19] mm: Move the page fragment allocator from page_alloc.c into its own file David Howells
2023-04-06 9:42 ` [PATCH net-next v5 03/19] mm: Make the page_frag_cache allocator use multipage folios David Howells
2023-04-07 0:54 ` Jakub Kicinski
2023-04-06 9:42 ` [PATCH net-next v5 04/19] mm: Make the page_frag_cache allocator use per-cpu David Howells
2023-04-06 9:42 ` [PATCH net-next v5 05/19] tcp: Support MSG_SPLICE_PAGES David Howells
2023-04-07 1:56 ` Willem de Bruijn
2023-04-07 2:13 ` David Ahern
2023-04-06 9:42 ` [PATCH net-next v5 06/19] tcp: Make sendmsg(MSG_SPLICE_PAGES) copy unspliceable data David Howells
2023-04-07 2:01 ` Willem de Bruijn
2023-04-06 9:42 ` [PATCH net-next v5 07/19] tcp: Convert do_tcp_sendpages() to use MSG_SPLICE_PAGES David Howells
2023-04-06 9:42 ` [PATCH net-next v5 08/19] tcp_bpf: Inline do_tcp_sendpages as it's now a wrapper around tcp_sendmsg David Howells
2023-04-06 9:42 ` [PATCH net-next v5 09/19] espintcp: Inline do_tcp_sendpages() David Howells
2023-04-06 9:42 ` [PATCH net-next v5 10/19] tls: " David Howells
2023-04-06 9:42 ` [PATCH net-next v5 11/19] siw: " David Howells
2023-04-06 15:36 ` Bernard Metzler
2023-04-06 9:42 ` [PATCH net-next v5 12/19] tcp: Fold do_tcp_sendpages() into tcp_sendpage_locked() David Howells
2023-04-06 9:42 ` [PATCH net-next v5 13/19] ip, udp: Support MSG_SPLICE_PAGES David Howells
2023-04-06 9:42 ` [PATCH net-next v5 14/19] ip, udp: Make sendmsg(MSG_SPLICE_PAGES) copy unspliceable data David Howells
2023-04-06 9:42 ` [PATCH net-next v5 15/19] ip6, udp6: Support MSG_SPLICE_PAGES David Howells
2023-04-06 9:42 ` [PATCH net-next v5 16/19] udp: Convert udp_sendpage() to use MSG_SPLICE_PAGES David Howells
2023-04-06 9:42 ` [PATCH net-next v5 17/19] ip: Remove ip_append_page() David Howells
2023-04-06 9:42 ` [PATCH net-next v5 18/19] af_unix: Support MSG_SPLICE_PAGES David Howells
2023-04-06 9:42 ` [PATCH net-next v5 19/19] af_unix: Make sendmsg(MSG_SPLICE_PAGES) copy unspliceable data David Howells
2023-04-06 9:46 ` [PATCH net-next v5 00/19] splice, net: Replace sendpage with sendmsg(MSG_SPLICE_PAGES), part 1 Eric Dumazet
2023-04-06 10:56 ` David Howells [this message]
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=3636418.1680778595@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hch@infradead.org \
--cc=jlayton@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willemdebruijn.kernel@gmail.com \
--cc=willy@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox