linux/net/rxrpc
David Howells d0b35a4203 rxrpc: Transmit more ACKs during data reception
Immediately flush any outstanding ACK on entry to rxrpc_recvmsg_data() -
which transfers data to the target buffers - if we previously had an Rx
underrun (ie. we returned -EAGAIN because we ran out of received data).
This lets the server know what we've managed to receive something.

Also flush any outstanding ACK after calling the function if it hit -EAGAIN
to let the server know we processed some data.

It might be better to send more ACKs, possibly on a time-based scheme, but
that needs some more consideration.

With this and some additional AFS patches, it is possible to get large
unencrypted O_DIRECT reads to be almost as fast as NFS over TCP.  It looks
like it might be theoretically possible to improve performance yet more for
a server running a single operation as investigation of packet timestamps
indicates that the server keeps stalling.

The issue appears to be that rxrpc runs in to trouble with ACK packets
getting batched together (up to ~32 at a time) somewhere between the IP
transmit queue on the client and the ethernet receive queue on the server.

However, this case isn't too much of a worry as even a lightly loaded
server should be receiving sufficient packet flux to flush the ACK packets
to the UDP socket.

Signed-off-by: David Howells <dhowells@redhat.com>
2018-08-01 13:28:24 +01:00
..
af_rxrpc.c net: simplify sock_poll_wait 2018-07-30 09:10:25 -07:00
ar-internal.h rxrpc: Transmit more ACKs during data reception 2018-08-01 13:28:24 +01:00
call_accept.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-04-03 14:04:18 -07:00
call_event.c rxrpc: remove redundant variables 'sp' and 'did_discard' 2018-08-01 13:28:23 +01:00
call_object.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-04-03 14:04:18 -07:00
conn_client.c rxrpc: Trace packet transmission 2018-08-01 13:28:23 +01:00
conn_event.c rxrpc: Trace packet transmission 2018-08-01 13:28:23 +01:00
conn_object.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-04-03 14:04:18 -07:00
conn_service.c rxrpc: Fix apparent leak of rxrpc_local objects 2018-03-30 21:05:33 +01:00
input.c rxrpc: Trace socket notification 2018-08-01 13:28:23 +01:00
insecure.c rxrpc: Trace protocol errors in received packets 2017-04-06 11:09:39 +01:00
Kconfig rxrpc: Add config to inject packet loss 2016-09-17 11:24:04 +01:00
key.c rxrpc: Use correct timestamp from Kerberos 5 ticket 2017-08-29 10:55:06 +01:00
local_event.c rxrpc: Trace packet transmission 2018-08-01 13:28:23 +01:00
local_object.c rxrpc: Fix error reception on AF_INET6 sockets 2018-05-10 23:26:00 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
misc.c rxrpc: Fix call timeouts 2017-11-24 10:18:41 +00:00
net_ns.c proc: introduce proc_create_net{,_data} 2018-05-16 07:24:30 +02:00
output.c rxrpc: Trace packet transmission 2018-08-01 13:28:23 +01:00
peer_event.c rxrpc: Add a tracepoint to log ICMP/ICMP6 and error messages 2018-05-10 23:26:01 +01:00
peer_object.c rxrpc: Fix leak of rxrpc_peer objects 2018-03-30 21:05:44 +01:00
proc.c rxrpc: Show some more information through /proc files 2018-08-01 13:28:23 +01:00
protocol.h rxrpc: Fix undefined packet handling 2018-04-04 11:04:08 -04:00
recvmsg.c rxrpc: Transmit more ACKs during data reception 2018-08-01 13:28:24 +01:00
rxkad.c rxrpc: Trace packet transmission 2018-08-01 13:28:23 +01:00
security.c rxrpc: remove unused static variables 2018-03-30 21:04:44 +01:00
sendmsg.c rxrpc: Fix missing start of call timeout 2018-05-10 23:26:00 +01:00
skbuff.c net: convert sk_buff.users from atomic_t to refcount_t 2017-07-01 07:39:07 -07:00
sysctl.c rxrpc: Fix call timeouts 2017-11-24 10:18:41 +00:00
utils.c rxrpc: Fix IPv6 support 2017-08-29 10:55:20 +01:00