summaryrefslogtreecommitdiffstats
path: root/LICENSES
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2018-07-23 18:18:38 +0200
committerDavid Howells <dhowells@redhat.com>2018-08-01 14:28:24 +0200
commitd0b35a42031a3107a5735e0d0a605a68f530a96b (patch)
tree8302456f797cac6ed08865a5d2f3f5fc132d77f3 /LICENSES
parentrxrpc: Propose, but don't immediately transmit, the final ACK for a call (diff)
downloadlinux-d0b35a42031a3107a5735e0d0a605a68f530a96b.tar.xz
linux-d0b35a42031a3107a5735e0d0a605a68f530a96b.zip
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>
Diffstat (limited to 'LICENSES')
0 files changed, 0 insertions, 0 deletions