freebsd-dev/sys/nfs
Mike Smith c5118de899 Implement NFS ACCESS RPC result caching.
This yields startling performance increases for NFS clients for many
access profiles, due to the fact that ACCESS results are persistently
cached in the namecache in many cases.

Note that the code is somewhat conservative in that it requires an
exact credential match for a cache hit.  This bloats the nfsnode
structure by sizeof(struct ucred) (96 bytes).  Any less conservative
approach opens the possibility for a false veto in eg. setuid
applications.  Alternative suggestions would be welcomed.

The cache is normally disabled, to activate set the sysctl variable
vfs.nfs.access_cache_timeout to a nonzero value.  This is the time in
seconds that a cached entry will be considered valid; useful values appear
to be 2-10 seconds.  Performance of the cache can be monitored with the
vfs.nfs.access_cache_hits and vfs.nfs.access_cache_hits variables.
1998-11-13 02:39:09 +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 The code checks each fragment mark to see if it's valid; if the fragment 1998-09-29 22:33:05 +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 Implement NFS ACCESS RPC result caching. 1998-11-13 02:39:09 +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 Implement NFS ACCESS RPC result caching. 1998-11-13 02:39:09 +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