Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Dec 2001 17:54:06 -0700
From:      Nate Williams <nate@yogotech.com>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        Kirk McKusick <mckusick@mckusick.com>, Robert Watson <rwatson@FreeBSD.ORG>, arch@FreeBSD.ORG
Subject:   Re: Patch for auto-default value for maxusers 
Message-ID:  <15378.46638.217290.407771@caddis.yogotech.com>
In-Reply-To: <200112082340.fB8NeI329704@apollo.backplane.com>
References:  <200112071957.fB7Jvef29774@beastie.mckusick.com> <200112082256.fB8MuwL19001@apollo.backplane.com> <200112082340.fB8NeI329704@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help
>     This patch is against -stable. 

Minor nit...

> 
> Index: usr.sbin/config/mkoptions.c
> ===================================================================
> RCS file: /home/ncvs/src/usr.sbin/config/mkoptions.c,v
> retrieving revision 1.17.2.2
> diff -u -r1.17.2.2 mkoptions.c
> --- usr.sbin/config/mkoptions.c	2000/11/21 20:03:38	1.17.2.2
> +++ usr.sbin/config/mkoptions.c	2001/12/08 23:26:16
> @@ -93,8 +93,8 @@
>  	} else
>  		up = &users[machine - 1];
>  	if (maxusers == 0) {
> -		printf("maxusers not specified; %d assumed\n", up->u_default);
> -		maxusers = up->u_default;
> +		/* printf("maxusers not specified; will auto-size\n"); */
> +		maxusers = 0;

Isn't this line kind of redundant, since we already know that maxusers == 0?




>  	} else if (maxusers < up->u_min) {
>  		printf("minimum of %d maxusers assumed\n", up->u_min);
>  		maxusers = up->u_min;
> Index: sys/alpha/alpha/machdep.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/alpha/alpha/machdep.c,v
> retrieving revision 1.68.2.14
> diff -u -r1.68.2.14 machdep.c
> --- sys/alpha/alpha/machdep.c	2001/10/04 13:09:36	1.68.2.14
> +++ sys/alpha/alpha/machdep.c	2001/12/08 23:12:38
> @@ -329,13 +329,14 @@
>  	 */
>  
>  	if (nbuf == 0) {
> -		int factor = 4 * BKVASIZE / PAGE_SIZE;
> +		int factor = 4 * BKVASIZE / 1024;
> +		int kbytes = physmem * (PAGE_SIZE / 1024);
>  
>  		nbuf = 50;
> -		if (physmem > 1024)
> -			nbuf += min((physmem - 1024) / factor, 16384 / factor);
> -		if (physmem > 16384)
> -			nbuf += (physmem - 16384) * 2 / (factor * 5);
> +		if (kbytes > 4096)
> +			nbuf += min((kbytes - 4096) / factor, 65536 / factor);
> +		if (kbytes > 65536)
> +			nbuf += (kbytes - 65536) * 2 / (factor * 5);
>  		if (maxbcache && nbuf > maxbcache / BKVASIZE)
>  			nbuf = maxbcache / BKVASIZE;
>  	}
> @@ -698,7 +699,7 @@
>  	kern_envp = bootinfo.envp;
>  
>  	/* Do basic tuning, hz etc */
> -	init_param();
> +	init_param1();
>  
>  	/*
>  	 * Initalize the (temporary) bootstrap console interface, so
> @@ -1004,6 +1005,7 @@
>  			physmem -= (sz - nsz);
>  		}
>  	}
> +	init_param2(physmem);
>  
>  	/*
>  	 * Initialize error message buffer (at end of core).
> Index: sys/i386/i386/machdep.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/i386/machdep.c,v
> retrieving revision 1.385.2.20
> diff -u -r1.385.2.20 machdep.c
> --- sys/i386/i386/machdep.c	2001/10/02 23:34:22	1.385.2.20
> +++ sys/i386/i386/machdep.c	2001/12/08 23:11:09
> @@ -331,13 +331,14 @@
>  	 * factor represents the 1/4 x ram conversion.
>  	 */
>  	if (nbuf == 0) {
> -		int factor = 4 * BKVASIZE / PAGE_SIZE;
> +		int factor = 4 * BKVASIZE / 1024;
> +		int kbytes = physmem * (PAGE_SIZE / 1024);
>  
>  		nbuf = 50;
> -		if (physmem > 1024)
> -			nbuf += min((physmem - 1024) / factor, 16384 / factor);
> -		if (physmem > 16384)
> -			nbuf += (physmem - 16384) * 2 / (factor * 5);
> +		if (kbytes > 4096)
> +			nbuf += min((kbytes - 4096) / factor, 65536 / factor);
> +		if (kbytes > 65536)
> +			nbuf += (kbytes - 65536) * 2 / (factor * 5);
>  		if (maxbcache && nbuf > maxbcache / BKVASIZE)
>  			nbuf = maxbcache / BKVASIZE;
>  	}
> @@ -1829,7 +1830,7 @@
>  		kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
>  
>  	/* Init basic tunables, hz etc */
> -	init_param();
> +	init_param1();
>  
>  	/*
>  	 * make gdt memory segments, the code segment goes up to end of the
> @@ -1963,6 +1964,7 @@
>  
>  	vm86_initialize();
>  	getmemsize(first);
> +	init_param2(physmem);
>  
>  	/* now running on new page tables, configured,and u/iom is accessible */
>  
> Index: sys/kern/subr_param.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/kern/subr_param.c,v
> retrieving revision 1.42.2.3
> diff -u -r1.42.2.3 subr_param.c
> --- sys/kern/subr_param.c	2001/11/03 01:41:08	1.42.2.3
> +++ sys/kern/subr_param.c	2001/12/08 23:28:49
> @@ -98,33 +98,16 @@
>  struct	buf *swbuf;
>  
>  /*
> - * Boot time overrides
> + * Boot time overrides that are not scaled against main memory
>   */
>  void
> -init_param(void)
> +init_param1(void)
>  {
> -
> -	/* Base parameters */
> -	maxusers = MAXUSERS;
> -	TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
>  	hz = HZ;
>  	TUNABLE_INT_FETCH("kern.hz", &hz);
>  	tick = 1000000 / hz;
>  	tickadj = howmany(30000, 60 * hz);	/* can adjust 30ms in 60s */
>  
> -	/* The following can be overridden after boot via sysctl */
> -	maxproc = NPROC;
> -	TUNABLE_INT_FETCH("kern.maxproc", &maxproc);
> -	maxfiles = MAXFILES;
> -	TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles);
> -	maxprocperuid = maxproc - 1;
> -	maxfilesperproc = maxfiles;
> -
> -	/* Cannot be changed after boot */
> -	nsfbufs = NSFBUFS;
> -	TUNABLE_INT_FETCH("kern.ipc.nsfbufs", &nsfbufs);
> -	nbuf = NBUF;
> -	TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
>  #ifdef VM_SWZONE_SIZE_MAX
>  	maxswzone = VM_SWZONE_SIZE_MAX;
>  #endif
> @@ -133,8 +116,6 @@
>  	maxbcache = VM_BCACHE_SIZE_MAX;
>  #endif
>  	TUNABLE_INT_FETCH("kern.maxbcache", &maxbcache);
> -	ncallout = 16 + maxproc + maxfiles;
> -	TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
>  
>  	maxtsiz = MAXTSIZ;
>  	TUNABLE_QUAD_FETCH("kern.maxtsiz", &maxtsiz);
> @@ -149,3 +130,45 @@
>  	sgrowsiz = SGROWSIZ;
>  	TUNABLE_QUAD_FETCH("kern.sgrowsiz", &sgrowsiz);
>  }
> +
> +/*
> + * Boot time overrides that are scaled against main memory
> + */
> +void
> +init_param2(int physpages)
> +{
> +
> +	/* Base parameters */
> +	if ((maxusers = MAXUSERS) == 0) {
> +		maxusers = physpages / (1024 * 1024 / PAGE_SIZE);
> +		if (maxusers < 32)
> +		    maxusers = 32;
> +		if (maxusers > 512)
> +		    maxusers = 512;
> +	}
> +	TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
> +
> +	/*
> +	 * The following can be overridden after boot via sysctl.  Note:
> +	 * unless overriden, these macros are ultimately based on maxusers.
> +	 */
> +	maxproc = NPROC;
> +	TUNABLE_INT_FETCH("kern.maxproc", &maxproc);
> +	maxfiles = MAXFILES;
> +	TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles);
> +	maxprocperuid = maxproc - 1;
> +	maxfilesperproc = maxfiles;
> +
> +	/*
> +	 * Cannot be changed after boot.  Unless overriden, NSFBUFS is based
> +	 * on maxusers and NBUF is typically 0 (auto-sized later).
> +	 */
> +	nsfbufs = NSFBUFS;
> +	TUNABLE_INT_FETCH("kern.ipc.nsfbufs", &nsfbufs);
> +	nbuf = NBUF;
> +	TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
> +
> +	ncallout = 16 + maxproc + maxfiles;
> +	TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
> +}
> +
> Index: sys/pc98/i386/machdep.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/pc98/i386/machdep.c,v
> retrieving revision 1.151.2.23
> diff -u -r1.151.2.23 machdep.c
> --- sys/pc98/i386/machdep.c	2001/10/08 03:29:43	1.151.2.23
> +++ sys/pc98/i386/machdep.c	2001/12/08 23:13:11
> @@ -344,13 +344,14 @@
>  	 * factor represents the 1/4 x ram conversion.
>  	 */
>  	if (nbuf == 0) {
> -		int factor = 4 * BKVASIZE / PAGE_SIZE;
> +		int factor = 4 * BKVASIZE / 1024;
> +		int kbytes = physmem * (PAGE_SIZE / 1024);
>  
>  		nbuf = 50;
> -		if (physmem > 1024)
> -			nbuf += min((physmem - 1024) / factor, 16384 / factor);
> -		if (physmem > 16384)
> -			nbuf += (physmem - 16384) * 2 / (factor * 5);
> +		if (kbytes > 4096)
> +			nbuf += min((kbytes - 4096) / factor, 65536 / factor);
> +		if (kbytes > 65536)
> +			nbuf += (kbytes - 65536) * 2 / (factor * 5);
>  		if (maxbcache && nbuf > maxbcache / BKVASIZE)
>  			nbuf = maxbcache / BKVASIZE;
>  	}
> @@ -1880,7 +1881,7 @@
>  		kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
>  
>  	/* Init basic tunables, hz etc */
> -	init_param();
> +	init_param1();
>  
>  	/*
>  	 * make gdt memory segments, the code segment goes up to end of the
> @@ -2014,6 +2015,7 @@
>  
>  	vm86_initialize();
>  	getmemsize(first);
> +	init_param2(physmem);
>  
>  	/* now running on new page tables, configured,and u/iom is accessible */
>  
> Index: sys/sys/systm.h
> ===================================================================
> RCS file: /home/ncvs/src/sys/sys/systm.h,v
> retrieving revision 1.111.2.11
> diff -u -r1.111.2.11 systm.h
> --- sys/sys/systm.h	2001/12/04 05:57:40	1.111.2.11
> +++ sys/sys/systm.h	2001/12/08 23:13:35
> @@ -126,7 +126,8 @@
>  
>  void	cpu_boot __P((int));
>  void	cpu_rootconf __P((void));
> -void	init_param __P((void));
> +void	init_param1 __P((void));
> +void	init_param2 __P((int physpages));
>  void	tablefull __P((const char *));
>  int	addlog __P((const char *, ...)) __printflike(1, 2);
>  int	kvprintf __P((char const *, void (*)(int, void*), void *, int,
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-arch" in the body of the message

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15378.46638.217290.407771>