netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: David Howells <dhowells@redhat.com>
Cc: netdev@vger.kernel.org, Marc Dionne <marc.dionne@auristor.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	linux-afs@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v3 00/21] rxrpc: Miscellaneous changes and make use of MSG_SPLICE_PAGES
Date: Thu, 7 Mar 2024 09:39:03 +0000	[thread overview]
Message-ID: <20240307093903.GJ281974@kernel.org> (raw)
In-Reply-To: <20240306000655.1100294-1-dhowells@redhat.com>

On Wed, Mar 06, 2024 at 12:06:30AM +0000, David Howells wrote:
> Here are some changes to AF_RXRPC:
> 
>  (1) Cache the transmission serial number of ACK and DATA packets in the
>      rxrpc_txbuf struct and log this in the retransmit tracepoint.
> 
>  (2) Don't use atomics on rxrpc_txbuf::flags[*] and cache the intended wire
>      header flags there too to avoid duplication.
> 
>  (3) Cache the wire checksum in rxrpc_txbuf to make it easier to create
>      jumbo packets in future (which will require altering the wire header
>      to a jumbo header and restoring it back again for retransmission).
> 
>  (4) Fix the protocol names in the wire ACK trailer struct.
> 
>  (5) Strip all the barriers and atomics out of the call timer tracking[*].
> 
>  (6) Remove atomic handling from call->tx_transmitted and
>      call->acks_prev_seq[*].
> 
>  (7) Don't bother resetting the DF flag after UDP packet transmission.  To
>      change it, we now call directly into UDP code, so it's quick just to
>      set it every time.
> 
>  (8) Merge together the DF/non-DF branches of the DATA transmission to
>      reduce duplication in the code.
> 
>  (9) Add a kvec array into rxrpc_txbuf and start moving things over to it.
>      This paves the way for using page frags.
> 
> (10) Split (sub)packet preparation and timestamping out of the DATA
>      transmission function.  This helps pave the way for future jumbo
>      packet generation.
> 
> (11) In rxkad, don't pick values out of the wire header stored in
>      rxrpc_txbuf, buf rather find them elsewhere so we can remove the wire
>      header from there.
> 
> (12) Move rxrpc_send_ACK() to output.c so that it can be merged with
>      rxrpc_send_ack_packet().
> 
> (13) Use rxrpc_txbuf::kvec[0] to access the wire header for the packet
>      rather than directly accessing the copy in rxrpc_txbuf.  This will
>      allow that to be removed to a page frag.
> 
> (14) Switch from keeping the transmission buffers in rxrpc_txbuf allocated
>      in the slab to allocating them using page fragment allocators.  There
>      are separate allocators for DATA packets (which persist for a while)
>      and control packets (which are discarded immediately).
> 
>      We can then turn on MSG_SPLICE_PAGES when transmitting DATA and ACK
>      packets.
> 
>      We can also get rid of the RCU cleanup on rxrpc_txbufs, preferring
>      instead to release the page frags as soon as possible.
> 
> (15) Parse received packets before handling timeouts as the former may
>      reset the latter.
> 
> (16) Make sure we don't retransmit DATA packets after all the packets have
>      been ACK'd.
> 
> (17) Differentiate traces for PING ACK transmission.
> 
> (18) Switch to keeping timeouts as ktime_t rather than a number of jiffies
>      as the latter is too coarse a granularity.  Only set the call timer at
>      the end of the call event function from the aggregate of all the
>      timeouts, thereby reducing the number of timer calls made.  In future,
>      it might be possible to reduce the number of timers from one per call
>      to one per I/O thread and to use a high-precision timer.
> 
> (19) Record RTT probes after successful transmission rather than recording
>      it before and then cancelling it after if unsuccessful[*].  This
>      allows a number of calls to get the current time to be removed.
> 
> (20) Clean up the resend algorithm as there's now no need to walk the
>      transmission buffer under lock[*].  DATA packets can be retransmitted
>      as soon as they're found rather than being queued up and transmitted
>      when the locked is dropped.
> 
> (21) When initially parsing a received ACK packet, extract some of the
>      fields from the ack info to the skbuff private data.  This makes it
>      easier to do path MTU discovery in the future when the call to which a
>      PING RESPONSE ACK refers has been deallocated.
> 
> 
> [*] Possible with the move of almost all code from softirq context to the
>     I/O thread.
> 
> The patches are tagged here:
> 
> 	git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git tags/rxrpc-iothread-20240305
> 
> And can be found on this branch:
> 
> 	http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=rxrpc-iothread
> 
> David
> 
> Link: https://lore.kernel.org/r/20240301163807.385573-1-dhowells@redhat.com/ # v1
> Link: https://lore.kernel.org/r/20240304084322.705539-1-dhowells@redhat.com/ # v2
> 
> Changes
> =======
> ver #3)
>  - Use passed-in gfp in rxkad_alloc_txbuf() rather than GFP_KRNEL.

Hi David,

Thanks for the update above.
For the record, I don't have anything to flag in this revision of the patchset.

>  - Adjust rxkad_alloc_txbuf()'s txb check to put return in if-statement.
> 
> ver #2)
>  - Removed an unused variable.
>  - Use ktime_to_us() rather than dividing a ktime by 1000 in tracepoints.

...

  parent reply	other threads:[~2024-03-07  9:39 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06  0:06 [PATCH net-next v3 00/21] rxrpc: Miscellaneous changes and make use of MSG_SPLICE_PAGES David Howells
2024-03-06  0:06 ` [PATCH net-next v3 01/21] rxrpc: Record the Tx serial in the rxrpc_txbuf and retransmit trace David Howells
2024-03-06  0:06 ` [PATCH net-next v3 02/21] rxrpc: Convert rxrpc_txbuf::flags into a mask and don't use atomics David Howells
2024-03-06  0:06 ` [PATCH net-next v3 03/21] rxrpc: Note cksum in txbuf David Howells
2024-03-06  0:06 ` [PATCH net-next v3 04/21] rxrpc: Fix the names of the fields in the ACK trailer struct David Howells
2024-03-06  0:06 ` [PATCH net-next v3 05/21] rxrpc: Strip barriers and atomics off of timer tracking David Howells
2024-03-06  0:06 ` [PATCH net-next v3 06/21] rxrpc: Remove atomic handling on some fields only used in I/O thread David Howells
2024-03-06  0:06 ` [PATCH net-next v3 07/21] rxrpc: Do lazy DF flag resetting David Howells
2024-03-06  0:06 ` [PATCH net-next v3 08/21] rxrpc: Merge together DF/non-DF branches of data Tx function David Howells
2024-03-06  0:06 ` [PATCH net-next v3 09/21] rxrpc: Add a kvec[] to the rxrpc_txbuf struct David Howells
2024-03-06  0:06 ` [PATCH net-next v3 10/21] rxrpc: Split up the DATA packet transmission function David Howells
2024-03-06  0:06 ` [PATCH net-next v3 11/21] rxrpc: Don't pick values out of the wire header when setting up security David Howells
2024-03-06  0:06 ` [PATCH net-next v3 12/21] rxrpc: Move rxrpc_send_ACK() to output.c with rxrpc_send_ack_packet() David Howells
2024-03-06  0:06 ` [PATCH net-next v3 13/21] rxrpc: Use rxrpc_txbuf::kvec[0] instead of rxrpc_txbuf::wire David Howells
2024-03-06  0:06 ` [PATCH net-next v3 14/21] rxrpc: Do zerocopy using MSG_SPLICE_PAGES and page frags David Howells
2024-03-06  0:06 ` [PATCH net-next v3 15/21] rxrpc: Parse received packets before dealing with timeouts David Howells
2024-03-06  0:06 ` [PATCH net-next v3 16/21] rxrpc: Don't permit resending after all Tx packets acked David Howells
2024-03-06  0:06 ` [PATCH net-next v3 17/21] rxrpc: Differentiate PING ACK transmission traces David Howells
2024-03-06  0:06 ` [PATCH net-next v3 18/21] rxrpc: Use ktimes for call timeout tracking and set the timer lazily David Howells
2024-03-06  0:06 ` [PATCH net-next v3 19/21] rxrpc: Record probes after transmission and reduce number of time-gets David Howells
2024-03-06  0:06 ` [PATCH net-next v3 20/21] rxrpc: Clean up the resend algorithm David Howells
2024-03-06  0:06 ` [PATCH net-next v3 21/21] rxrpc: Extract useful fields from a received ACK to skb priv data David Howells
2024-03-07  9:39 ` Simon Horman [this message]
2024-03-08  5:10 ` [PATCH net-next v3 00/21] rxrpc: Miscellaneous changes and make use of MSG_SPLICE_PAGES patchwork-bot+netdevbpf

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=20240307093903.GJ281974@kernel.org \
    --to=horms@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-afs@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.dionne@auristor.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    /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;
as well as URLs for NNTP newsgroup(s).