freebsd-nq/sys/fs
Alexander Motin d473bac729 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
..
cd9660 NULL stale pointers (should be a no-op as they should no longer be 2013-09-25 02:49:18 +00:00
deadfs The deadfs VOPs for vop_ioctl and vop_bmap call itself recursively, 2012-09-13 13:05:45 +00:00
devfs Fix long known bug with handling device aliases residing not in devfs root. 2013-12-12 11:05:48 +00:00
ext2fs ext2fs: make the hashing algorithm match the linux code. 2013-12-23 19:47:34 +00:00
fdescfs Handle cases where capability rights are not provided. 2013-09-05 11:58:12 +00:00
fifofs Do not allow O_EXEC opens for fifo, return EINVAL. 2013-12-17 17:28:02 +00:00
fuse Change the cap_rights_t type from uint64_t to a structure that we can extend 2013-09-05 00:09:56 +00:00
msdosfs Expand the use of stat(2) flags to allow storing some Windows/DOS 2013-08-21 23:04:48 +00:00
nandfs - Convert the bufobj lock to rwlock. 2013-05-31 00:43:41 +00:00
nfs Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
nfsclient The NFSv4 client was passing both the p and cred arguments to 2013-12-24 00:48:39 +00:00
nfsserver Rework NFS Duplicate Request Cache cleanup logic. 2014-01-03 15:09:59 +00:00
nullfs Fix the length calculation for the final block of a sendfile(2) 2013-09-10 10:05:59 +00:00
procfs Relax the vm object locking. Use a read lock. 2013-06-05 17:00:10 +00:00
pseudofs Redo r258088 to avoid relying on signed arithmetic overflow, since 2013-11-20 19:41:00 +00:00
smbfs Expand the use of stat(2) flags to allow storing some Windows/DOS 2013-08-21 23:04:48 +00:00
tmpfs Support storing 7 additional file flags in tmpfs: 2013-08-28 22:12:56 +00:00
udf Add currently unused flag argument to the cluster_read(), 2013-03-14 20:28:26 +00:00
unionfs r16312 is not any longer real since many years (likely since when VFS 2012-11-19 22:43:45 +00:00