Size the NFS server dupreq cache on the basis of nmbclusters. On servers
with low nmbclusters, we tie up too many mbclusters in the NFS duplicate request cache. This change limits the size of the dupreq cache to 1/2 the nmbclusters (and flaots in a range of [64, 2048]). MFC after 2 weeks. Reported by: Steve Kargl, David O'Brien Tested by: Steve Kargl
This commit is contained in:
parent
f8910b42c8
commit
5943f1a781
@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/mutex.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/socketvar.h> /* for sodupsockaddr */
|
||||
#include <sys/eventhandler.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <nfs/rpcv2.h>
|
||||
@ -57,7 +58,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <nfsserver/nfsrvcache.h>
|
||||
|
||||
static long numnfsrvcache;
|
||||
static long desirednfsrvcache = NFSRVCACHESIZ;
|
||||
static long desirednfsrvcache;
|
||||
|
||||
#define NFSRCHASH(xid) \
|
||||
(&nfsrvhashtbl[((xid) + ((xid) >> 24)) & nfsrvhash])
|
||||
@ -122,15 +123,32 @@ static const int nfsv2_repstat[NFS_NPROCS] = {
|
||||
FALSE,
|
||||
};
|
||||
|
||||
/*
|
||||
* Size the NFS server's duplicate request cache at 1/2 the nmbclsters, floating
|
||||
* within a (64, 2048) range. This is to prevent all mbuf clusters being tied up
|
||||
* in the NFS dupreq cache for small values of nmbclusters.
|
||||
*/
|
||||
static void
|
||||
nfsrvcache_size_change(void *tag)
|
||||
{
|
||||
desirednfsrvcache = nmbclusters /2;
|
||||
if (desirednfsrvcache > NFSRVCACHE_MAX_SIZE)
|
||||
desirednfsrvcache = NFSRVCACHE_MAX_SIZE;
|
||||
if (desirednfsrvcache < NFSRVCACHE_MIN_SIZE)
|
||||
desirednfsrvcache = NFSRVCACHE_MIN_SIZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the server request cache list
|
||||
*/
|
||||
void
|
||||
nfsrv_initcache(void)
|
||||
{
|
||||
|
||||
nfsrvcache_size_change(NULL);
|
||||
nfsrvhashtbl = hashinit(desirednfsrvcache, M_NFSD, &nfsrvhash);
|
||||
TAILQ_INIT(&nfsrvlruhead);
|
||||
EVENTHANDLER_REGISTER(nmbclusters_change, nfsrvcache_size_change, NULL,
|
||||
EVENTHANDLER_PRI_FIRST);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -41,8 +41,8 @@
|
||||
/*
|
||||
* Definitions for the server recent request cache
|
||||
*/
|
||||
|
||||
#define NFSRVCACHESIZ 2048
|
||||
#define NFSRVCACHE_MAX_SIZE 2048
|
||||
#define NFSRVCACHE_MIN_SIZE 64
|
||||
|
||||
struct nfsrvcache {
|
||||
TAILQ_ENTRY(nfsrvcache) rc_lru; /* LRU chain */
|
||||
|
Loading…
x
Reference in New Issue
Block a user