Date: Thu, 8 Nov 2012 20:15:13 +0000 (UTC) From: Alfred Perlstein <alfred@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r242783 - in user/alfred/9-alfred/sys: i386/include kern Message-ID: <201211082015.qA8KFD1O015304@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211082015.qA8KFD1O015304>