freebsd-dev/sys/nfs
Mike Smith ad6d02135b Reimplement the NFS ACCESS RPC cache as an "accelerator" rather than a true
cache.  If the cached result lets us say "yes", then go with that.  If
we're not sure, or we think the answer might be "no", go to the wire to be
certain.    This avoids all of the possible false veto cases, and allows us
to key the cached value with just the UID for which the cached value holds,
reducing the bloat of the nfsnode structure from 104 bytes to just 12 bytes.

Since the "yes" case is by far the most common, this should still provide
a substantial performance improvement.  Also default the cache to on, with
a conservative timeout (2 seconds).  This improves performance if NFS is
loaded as a KLD module, as there's not (yet) code to parse an option out
of the module arguments to set it, and sysctl doesn't work (yet) for OIDs
in modules.

The 'accelerator' mode was suggested by Bjoern Groenvall (bg@sics.se)

Feedback on this would be appreciated as testing has been necessarily
limited by Comdex, and it would be valuable to have this in 2.2.8.
1998-11-15 20:36:18 +00:00
..
bootp_subr.c Yow! Completely change the way socket options are handled, eliminating 1998-08-23 03:07:17 +00:00
krpc_subr.c Yow! Completely change the way socket options are handled, eliminating 1998-08-23 03:07:17 +00:00
krpc.h Forward declare more structs that are used in prototypes here - don't 1998-02-01 20:34:07 +00:00
nfs_bio.c Remove [apparently] bogus casts to u_long for the vnode_pager_setsize() 1998-11-09 07:00:14 +00:00
nfs_common.c Remove [apparently] bogus casts to u_long for the vnode_pager_setsize() 1998-11-09 07:00:14 +00:00
nfs_common.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfs_node.c Do not need (or want) to take a reference on an NFS file that 1998-09-29 23:15:25 +00:00
nfs_nqlease.c Use TAILQ macros for clean/dirty block list processing. Set b_xflags 1998-10-31 15:31:29 +00:00
nfs_serv.c vm_object_page_clean() last arg changed from TRUE to OBJPC_SYNC. I'm not 1998-10-31 15:39:31 +00:00
nfs_socket.c Fix a panic in nfsrv_dorec() where a NULL pointer could be passed to 1998-11-13 09:44:12 +00:00
nfs_srvcache.c Moved `#ifndef NFS_NOSERVER' after including nfs.h. 1998-07-02 12:41:42 +00:00
nfs_subs.c Remove [apparently] bogus casts to u_long for the vnode_pager_setsize() 1998-11-09 07:00:14 +00:00
nfs_syscalls.c Check for NULL pointer before freeing a struct sockaddr. m_freem() can handle 1998-09-01 02:31:52 +00:00
nfs_vfsops.c Use TAILQ macros for clean/dirty block list processing. Set b_xflags 1998-10-31 15:31:29 +00:00
nfs_vnops.c Reimplement the NFS ACCESS RPC cache as an "accelerator" rather than a true 1998-11-15 20:36:18 +00:00
nfs.h Made unloading of the nfs LKM sort of work. This is mainly to test 1998-09-07 05:42:15 +00:00
nfsdiskless.h Removed more vestiges of config-time swap configuration. 1997-09-07 12:56:46 +00:00
nfsm_subs.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsmount.h When using NFSv3, use the remote server's idea of the maximum file size 1998-05-30 16:33:58 +00:00
nfsnode.h Reimplement the NFS ACCESS RPC cache as an "accelerator" rather than a true 1998-11-15 20:36:18 +00:00
nfsproto.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsrtt.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsrvcache.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsv2.h Delete the #if 0 (nearly) duplicate definitions of nfsproto.h. Having 1998-05-13 06:40:56 +00:00
nqnfs.h Use u_int32_t in NQFHHASH instead of u_long. 1998-07-05 10:13:22 +00:00
rpcv2.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
xdr_subs.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00