summaryrefslogtreecommitdiffstats
path: root/sys/contrib
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-01-22 23:46:19 +0000
committermav <mav@FreeBSD.org>2014-01-22 23:46:19 +0000
commit01e3debc7e24dfa40ae5ba8fdd9bf0142cfe4593 (patch)
tree120431897881c3325f11fb6568a64e939e7ef4b3 /sys/contrib
parent4202d51e165f8d8c6f71a9db5a3446bae7264e3c (diff)
downloadFreeBSD-src-01e3debc7e24dfa40ae5ba8fdd9bf0142cfe4593.zip
FreeBSD-src-01e3debc7e24dfa40ae5ba8fdd9bf0142cfe4593.tar.gz
MFC r259632:
Rework flow control for connection-oriented (TCP) RPC server. When processing receive buffer, write the amount of data, expected in present request record, into socket's so_rcv.sb_lowat to make stack aware about our needs. When processing following upcalls, ignore them until socket collect enough data to be read and processed in one turn. This change reduces number of context switches and other operations in RPC stack during large NFS writes (especially via non-Jumbo networks) by order of magnitude. After precessing current packet, take another look into the pending buffer to find out whether the next packet had been already received. If not, deactivate this port right there without making RPC code to push this port to another thread just to find that there is nothing. If the next packet is received partially, also deactivate the port, but also update socket's so_rcv.sb_lowat to not be woken up prematurely. This change additionally reduces number of context switches per NFS request about in half.
Diffstat (limited to 'sys/contrib')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud