freebsd-skq/sys/rpc
mav d75fe782e9 Rework NFS Duplicate Request Cache cleanup logic.
- Introduce additional hash to group requests by hash of sockref.  This
allows to process TCP acknowledgements without looping though all the cache,
and as result allows to do it every time.
 - Indroduce additional callbacks to notify application layer about sockets
disconnection.  Without this last few requests processed just before socket
disconnection never processed their ACKs and stuck in cache for many hours.
 - Implement transport-specific method for tracking reply acknowledgements.
New implementation does not cross multiple stack layers to get the data and
does not have race conditions that previously made some requests stuck
in cache.  This could be done more efficiently at sockbuf layer, but that
would broke some KBIs, while I don't know other consumers for it aside NFS.
 - Instead of traversing all DRC twice per request, run cleaning only once
per request, and except in some conditions traverse only single hash slot
at a time.

Together this limits NFS DRC growth only to situations of real connectivity
problems.  If network is working well, and so all replies are acknowledged,
cache remains almost empty even after hours of heavy load.  Without this
change on the same test cache was growing to many thousand requests even
with perfectly working local network.

As another result this reduces CPU time spent on the DRC handling during
SPEC NFS benchmark from about 10% to 0.5%.

Sponsored by:	iXsystems, Inc.
2014-01-03 15:09:59 +00:00
..
rpcsec_gss Add support for host-based (Kerberos 5 service principal) initiator 2013-07-09 01:05:28 +00:00
auth_none.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
auth_unix.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
auth.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
authunix_prot.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
clnt_dg.c Remove some unused static const strings under sys/rpc, which have never 2013-12-24 20:55:22 +00:00
clnt_rc.c Revert 195703 and 195821 as this special stop handling in NFS is now 2013-03-13 21:06:03 +00:00
clnt_stat.h
clnt_vc.c Remove some unused static const strings under sys/rpc, which have never 2013-12-24 20:55:22 +00:00
clnt.h Replace Sun Industry Standards Source License for Sun RPC code with a 2013-11-25 19:08:38 +00:00
getnetconfig.c
krpc.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
netconfig.h
nettype.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
pmap_prot.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
replay.c
replay.h
rpc_callmsg.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpc_com.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpc_generic.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpc_msg.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpc_prot.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpc.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpcb_clnt.c Move a static const variable to the #if 0 part where it is only used. 2013-12-24 20:57:26 +00:00
rpcb_clnt.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:07:44 +00:00
rpcb_prot.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpcb_prot.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
rpcm_subs.h Use m_get(), m_gethdr() and m_getcl() instead of historic macros. 2013-03-12 12:17:19 +00:00
rpcsec_gss.h Add support for host-based (Kerberos 5 service principal) initiator 2013-07-09 01:05:28 +00:00
svc_auth_unix.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
svc_auth.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
svc_auth.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
svc_dg.c Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
svc_generic.c Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
svc_vc.c Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
svc.c Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
svc.h Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
types.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00
xdr.h Replace Sun RPC license in TI-RPC library with a 3-clause BSD license, 2013-11-25 19:04:36 +00:00