Allow maxusers to scale on machines with large address space.
Some hooks are added to clamp down maxusers and nmbclusters for small address space systems. VM_MAX_AUTOTUNE_MAXUSERS - the max maxusers that will be autotuned based on physical memory. VM_MAX_AUTOTUNE_NMBCLUSTERS - max nmbclusters based on physical memory. These are set to the old values on i386 to preserve the clamping that was being done to all arches. Another macro VM_AUTOTUNE_NMBCLUSTERS is provided to allow an override for the calculation on a MD basis. Currently no arch defines this. Reviewed by: peter MFC after: 2 weeks
This commit is contained in:
parent
a9b09a3f3c
commit
79f62ed690
@ -202,4 +202,13 @@
|
||||
|
||||
#define ZERO_REGION_SIZE (64 * 1024) /* 64KB */
|
||||
|
||||
#ifndef VM_MAX_AUTOTUNE_MAXUSERS
|
||||
#define VM_MAX_AUTOTUNE_MAXUSERS 384
|
||||
#endif
|
||||
|
||||
#ifndef VM_MAX_AUTOTUNE_NMBCLUSTERS
|
||||
/* old maxusers max value. */
|
||||
#define VM_MAX_AUTOTUNE_NMBCLUSTERS (1024 + VM_MAX_AUTOTUNE_MAXUSERS * 64)
|
||||
#endif
|
||||
|
||||
#endif /* _MACHINE_VMPARAM_H_ */
|
||||
|
@ -113,8 +113,17 @@ tunable_mbinit(void *dummy)
|
||||
|
||||
/* This has to be done before VM init. */
|
||||
TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters);
|
||||
if (nmbclusters == 0)
|
||||
if (nmbclusters == 0) {
|
||||
#ifdef VM_AUTOTUNE_NMBCLUSTERS
|
||||
nmbclusters = VM_AUTOTUNE_NMBCLUSTERS;
|
||||
#else
|
||||
nmbclusters = 1024 + maxusers * 64;
|
||||
#endif
|
||||
#ifdef VM_MAX_AUTOTUNE_NMBCLUSTERS
|
||||
if (nmbclusters > VM_MAX_AUTOTUNE_NMBCLUSTERS)
|
||||
nmbclusters = VM_MAX_AUTOTUNE_NMBCLUSTERS;
|
||||
#endif
|
||||
}
|
||||
|
||||
TUNABLE_INT_FETCH("kern.ipc.nmbjumbop", &nmbjumbop);
|
||||
if (nmbjumbop == 0)
|
||||
|
@ -278,17 +278,17 @@ init_param2(long physpages)
|
||||
maxusers = physpages / (2 * 1024 * 1024 / PAGE_SIZE);
|
||||
if (maxusers < 32)
|
||||
maxusers = 32;
|
||||
/*
|
||||
* Clips maxusers to 384 on machines with <= 4GB RAM or 32bit.
|
||||
* Scales it down 6x for large memory machines.
|
||||
*/
|
||||
if (maxusers > 384) {
|
||||
if (sizeof(void *) <= 4)
|
||||
maxusers = 384;
|
||||
else
|
||||
maxusers = 384 + ((maxusers - 384) / 6);
|
||||
}
|
||||
}
|
||||
#ifdef VM_MAX_AUTOTUNE_MAXUSERS
|
||||
if (maxusers > VM_MAX_AUTOTUNE_MAXUSERS)
|
||||
maxusers = VM_MAX_AUTOTUNE_MAXUSERS;
|
||||
#endif
|
||||
/*
|
||||
* Scales down the function in which maxusers grows once
|
||||
* we hit 384.
|
||||
*/
|
||||
if (maxusers > 384)
|
||||
maxusers = 384 + ((maxusers - 384) / 8);
|
||||
}
|
||||
|
||||
/*
|
||||
* The following can be overridden after boot via sysctl. Note:
|
||||
|
Loading…
Reference in New Issue
Block a user