svn commit: r242783 - in user/alfred/9-alfred/sys: i386/include kern
Alfred Perlstein
alfred at FreeBSD.org
Thu Nov 8 20:15:13 UTC 2012
Author: alfred
Date: Thu Nov 8 20:15:12 2012
New Revision: 242783
URL: http://svnweb.freebsd.org/changeset/base/242783
Log:
Divorce autotune nmbclusters from maxusers.
Provide arch specific override maximum.
Suggested by: peter
Modified:
user/alfred/9-alfred/sys/i386/include/vmparam.h
user/alfred/9-alfred/sys/kern/kern_mbuf.c
Modified: user/alfred/9-alfred/sys/i386/include/vmparam.h
==============================================================================
--- user/alfred/9-alfred/sys/i386/include/vmparam.h Thu Nov 8 18:11:31 2012 (r242782)
+++ user/alfred/9-alfred/sys/i386/include/vmparam.h Thu Nov 8 20:15:12 2012 (r242783)
@@ -202,4 +202,9 @@
#define ZERO_REGION_SIZE (64 * 1024) /* 64KB */
+#ifndef MAX_AUTOTUNE_NMBCLUSTERS
+/* old maxusers max value. */
+#define MAX_AUTOTUNE_NMBCLUSTERS (1024 + 384 * 64)
+#endif
+
#endif /* _MACHINE_VMPARAM_H_ */
Modified: user/alfred/9-alfred/sys/kern/kern_mbuf.c
==============================================================================
--- user/alfred/9-alfred/sys/kern/kern_mbuf.c Thu Nov 8 18:11:31 2012 (r242782)
+++ user/alfred/9-alfred/sys/kern/kern_mbuf.c Thu Nov 8 20:15:12 2012 (r242783)
@@ -102,6 +102,30 @@ int nmbjumbo9; /* limits number of 9k
int nmbjumbo16; /* limits number of 16k jumbo clusters */
struct mbstat mbstat;
+static int
+nmbclusters_from_physpages(void)
+{
+ long factor;
+ long rv;
+
+ factor = physmem / (2 * 1024 * 1024 / PAGE_SIZE);
+ if (factor < 32)
+ factor = 32;
+ /* after 384, switch scale to 1/4 */
+ if (factor > 384)
+ factor = 384 + (factor - 384) / 4;
+ rv = 1024 + factor * 64;
+ /*
+ * allow a platform specific override to prevent exhausting
+ * kernel memory on large memory + small address space machines.
+ */
+#ifdef MAX_AUTOTUNE_NMBCLUSTERS
+ if (rv > MAX_AUTOTUNE_NMBCLUSTERS)
+ rv = MAX_AUTOTUNE_NMBCLUSTERS
+#endif
+ return (rv);
+}
+
/*
* tunable_mbinit() has to be run before init_maxsockets() thus
* the SYSINIT order below is SI_ORDER_MIDDLE while init_maxsockets()
@@ -114,7 +138,7 @@ tunable_mbinit(void *dummy)
/* This has to be done before VM init. */
TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters);
if (nmbclusters == 0)
- nmbclusters = 1024 + maxusers * 64;
+ nmbclusters = nmbclusters_from_physpages();
TUNABLE_INT_FETCH("kern.ipc.nmbjumbop", &nmbjumbop);
if (nmbjumbop == 0)
More information about the svn-src-user
mailing list