[net-next,00/13] rxrpc: Increasing SACK size and moving away from softirq, part 5

Message ID 20230131171227.3912130-1-dhowells@redhat.com
Headers
Series rxrpc: Increasing SACK size and moving away from softirq, part 5 |

Message

David Howells Jan. 31, 2023, 5:12 p.m. UTC
  Here's the fifth part of patches in the process of moving rxrpc from doing
a lot of its stuff in softirq context to doing it in an I/O thread in
process context and thereby making it easier to support a larger SACK
table.

The full description is in the description for the first part[1] which is
now upstream.  The second and third parts are also upstream[2].  A subset
of the original fourth part[3] got applied as a fix for a race[4].

The fifth part includes some cleanups:

 (1) Miscellaneous trace header cleanups: fix a trace string, display the
     security index in rx_packet rather than displaying the type twice,
     remove some whitespace to make checkpatch happier and remove some
     excess tabulation.

 (2) Convert ->recvmsg_lock to a spinlock as it's only ever locked
     exclusively.

 (3) Make ->ackr_window and ->ackr_nr_unacked non-atomic as they're only
     used in the I/O thread.

 (4) Don't use call->tx_lock to access ->tx_buffer as that is only accessed
     inside the I/O thread.  sendmsg() loads onto ->tx_sendmsg and the I/O
     thread decants from that to the buffer.

 (5) Remove local->defrag_sem as DATA packets are transmitted serially by
     the I/O thread.

 (6) Remove the service connection bundle is it was only used for its
     channel_lock - which has now gone.

And some more significant changes:

 (7) Add a debugging option to allow a delay to be injected into packet
     reception to help investigate the behaviour over longer links than
     just a few cm.

 (8) Generate occasional PING ACKs to probe for RTT information during a
     receive heavy call.

 (9) Simplify the SACK table maintenance and ACK generation.  Now that both
     parts are done in the same thread, there's no possibility of a race
     and no need to try and be cunning to avoid taking a BH spinlock whilst
     copying the SACK table (which in the future will be up to 2K) and no
     need to rotate the copy to fit the ACK packet table.

(10) Use SKB_CONSUMED when freeing received DATA packets (stop dropwatch
     complaining).

The patches are tagged here:

	git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git tags/rxrpc-next-20230131

And can be found on this branch:

	http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=rxrpc-next

David

Link: https://lore.kernel.org/r/166794587113.2389296.16484814996876530222.stgit@warthog.procyon.org.uk/ [1]
Link: https://lore.kernel.org/r/166994010342.1732290.13771061038178613124.stgit@warthog.procyon.org.uk/ [2]
Link: https://lore.kernel.org/r/167034231605.1105287.1693064952174322878.stgit@warthog.procyon.org.uk/ [3]
Link: https://lore.kernel.org/r/167308517118.1538866.3440481802366869065.stgit@warthog.procyon.org.uk/ [4]

David Howells (13):
  rxrpc: Fix trace string
  rxrpc: Remove whitespace before ')' in trace header
  rxrpc: Shrink the tabulation in the rxrpc trace header a bit
  rxrpc: Convert call->recvmsg_lock to a spinlock
  rxrpc: Allow a delay to be injected into packet reception
  rxrpc: Generate extra pings for RTT during heavy-receive call
  rxrpc: De-atomic call->ackr_window and call->ackr_nr_unacked
  rxrpc: Simplify ACK handling
  rxrpc: Don't lock call->tx_lock to access call->tx_buffer
  rxrpc: Remove local->defrag_sem
  rxrpc: Show consumed and freed packets as non-dropped in dropwatch
  rxrpc: Change rx_packet tracepoint to display securityIndex not type
    twice
  rxrpc: Kill service bundle

 include/trace/events/rxrpc.h | 480 +++++++++++++++++++----------------
 net/rxrpc/Kconfig            |   9 +
 net/rxrpc/af_rxrpc.c         |   2 +-
 net/rxrpc/ar-internal.h      |  15 +-
 net/rxrpc/call_accept.c      |   2 +-
 net/rxrpc/call_event.c       |  15 +-
 net/rxrpc/call_object.c      |   7 +-
 net/rxrpc/conn_service.c     |   7 -
 net/rxrpc/input.c            |  60 ++---
 net/rxrpc/io_thread.c        |  48 +++-
 net/rxrpc/local_object.c     |   7 +-
 net/rxrpc/misc.c             |   7 +
 net/rxrpc/output.c           |  69 ++---
 net/rxrpc/proc.c             |   4 +-
 net/rxrpc/recvmsg.c          |  18 +-
 net/rxrpc/skbuff.c           |   4 +-
 net/rxrpc/sysctl.c           |  17 +-
 net/rxrpc/txbuf.c            |  12 +-
 18 files changed, 438 insertions(+), 345 deletions(-)
  

Comments

patchwork-bot+netdevbpf@kernel.org Feb. 2, 2023, 12:10 p.m. UTC | #1
Hello:

This series was applied to netdev/net-next.git (master)
by David Howells <dhowells@redhat.com>:

On Tue, 31 Jan 2023 17:12:14 +0000 you wrote:
> Here's the fifth part of patches in the process of moving rxrpc from doing
> a lot of its stuff in softirq context to doing it in an I/O thread in
> process context and thereby making it easier to support a larger SACK
> table.
> 
> The full description is in the description for the first part[1] which is
> now upstream.  The second and third parts are also upstream[2].  A subset
> of the original fourth part[3] got applied as a fix for a race[4].
> 
> [...]

Here is the summary with links:
  - [net-next,01/13] rxrpc: Fix trace string
    https://git.kernel.org/netdev/net-next/c/8395406b3495
  - [net-next,02/13] rxrpc: Remove whitespace before ')' in trace header
    https://git.kernel.org/netdev/net-next/c/371e68ba0306
  - [net-next,03/13] rxrpc: Shrink the tabulation in the rxrpc trace header a bit
    https://git.kernel.org/netdev/net-next/c/828bebc80a03
  - [net-next,04/13] rxrpc: Convert call->recvmsg_lock to a spinlock
    https://git.kernel.org/netdev/net-next/c/223f59016fa2
  - [net-next,05/13] rxrpc: Allow a delay to be injected into packet reception
    https://git.kernel.org/netdev/net-next/c/af094824f20b
  - [net-next,06/13] rxrpc: Generate extra pings for RTT during heavy-receive call
    https://git.kernel.org/netdev/net-next/c/84e28aa513af
  - [net-next,07/13] rxrpc: De-atomic call->ackr_window and call->ackr_nr_unacked
    https://git.kernel.org/netdev/net-next/c/5bbf953382be
  - [net-next,08/13] rxrpc: Simplify ACK handling
    https://git.kernel.org/netdev/net-next/c/f21e93485bcb
  - [net-next,09/13] rxrpc: Don't lock call->tx_lock to access call->tx_buffer
    https://git.kernel.org/netdev/net-next/c/b30d61f4b128
  - [net-next,10/13] rxrpc: Remove local->defrag_sem
    https://git.kernel.org/netdev/net-next/c/e7f40f4a701b
  - [net-next,11/13] rxrpc: Show consumed and freed packets as non-dropped in dropwatch
    https://git.kernel.org/netdev/net-next/c/f20fe3ff82b3
  - [net-next,12/13] rxrpc: Change rx_packet tracepoint to display securityIndex not type twice
    https://git.kernel.org/netdev/net-next/c/83836eb4df75
  - [net-next,13/13] rxrpc: Kill service bundle
    https://git.kernel.org/netdev/net-next/c/550130a0ce30

You are awesome, thank you!