[PATCH net-next 0/3] rxrpc: Allow more calls to same peer

From: David Howells
Date: Tue Sep 08 2020 - 16:51:02 EST



Here are some development patches for AF_RXRPC that allow more simultaneous
calls to be made to the same peer with the same security parameters. The
current code allows a maximum of 4 simultaneous calls, which limits the afs
filesystem to that many simultaneous threads. This increases the limit to
16.

To make this work, the way client connections are limited has to be changed
(incoming call/connection limits are unaffected) as the current code
depends on queuing calls on a connection and then pushing the connection
through a queue. The limit is on the number of available connections.

This is changed such that there's a limit[*] on the total number of calls
systemwide across all namespaces, but the limit on the number of client
connections is removed.

Once a call is allowed to proceed, it finds a bundle of connections and
tries to grab a call slot. If there's a spare call slot, fine, otherwise
it will wait. If there's already a waiter, it will try to create another
connection in the bundle, unless the limit of 4 is reached (4 calls per
connection, giving 16).

A number of things throttle someone trying to set up endless connections:

- Calls that fail immediately have their conns deleted immediately,

- Calls that don't fail immediately have to wait for a timeout,

- Connections normally get automatically reaped if they haven't been used
for 2m, but this is sped up to 2s if the number of connections rises
over 900. This number is tunable by sysctl.


[*] Technically two limits - kernel sockets and userspace rxrpc sockets are
accounted separately.

The patches are tagged here:

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

and can also be found on this branch:

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

David
---
David Howells (3):
rxrpc: Impose a maximum number of client calls
rxrpc: Rewrite the client connection manager
rxrpc: Allow multiple client connections to the same peer


include/trace/events/rxrpc.h | 33 +-
net/rxrpc/ar-internal.h | 68 +--
net/rxrpc/conn_client.c | 1087 +++++++++++++++-------------------
net/rxrpc/conn_event.c | 14 +-
net/rxrpc/conn_object.c | 12 +-
net/rxrpc/conn_service.c | 7 +
net/rxrpc/local_object.c | 4 +-
net/rxrpc/net_ns.c | 5 +-
net/rxrpc/output.c | 6 +
net/rxrpc/proc.c | 2 +-
net/rxrpc/rxkad.c | 8 +-
net/rxrpc/sysctl.c | 10 +-
12 files changed, 565 insertions(+), 691 deletions(-)