svn commit: r242847 - in head/sys: i386/include kern
Alfred Perlstein
alfred at FreeBSD.org
Sat Nov 10 02:08:40 UTC 2012
Author: alfred
Date: Sat Nov 10 02:08:40 2012
New Revision: 242847
URL: http://svnweb.freebsd.org/changeset/base/242847
Log:
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
Modified:
head/sys/i386/include/vmparam.h
head/sys/kern/kern_mbuf.c
head/sys/kern/subr_param.c
Modified: head/sys/i386/include/vmparam.h
==============================================================================
--- head/sys/i386/include/vmparam.h Sat Nov 10 02:08:19 2012 (r242846)
+++ head/sys/i386/include/vmparam.h Sat Nov 10 02:08:40 2012 (r242847)
@@ -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_ */
Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c Sat Nov 10 02:08:19 2012 (r242846)
+++ head/sys/kern/kern_mbuf.c Sat Nov 10 02:08:40 2012 (r242847)
@@ -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)
Modified: head/sys/kern/subr_param.c
==============================================================================
--- head/sys/kern/subr_param.c Sat Nov 10 02:08:19 2012 (r242846)
+++ head/sys/kern/subr_param.c Sat Nov 10 02:08:40 2012 (r242847)
@@ -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:
More information about the svn-src-all
mailing list