Re: svn commit: r248031 - in head/sys: kern sys

From: Alan Cox <alc_at_rice.edu>
Date: Fri, 08 Mar 2013 12:17:34 -0600
On 03/08/2013 04:14, Andre Oppermann wrote:
> Author: andre
> Date: Fri Mar  8 10:14:58 2013
> New Revision: 248031
> URL: http://svnweb.freebsd.org/changeset/base/248031
>
> Log:
>   Move the auto-sizing of the callout array from init_param2() to
>   kern_timeout_callwheel_alloc() where it is actually used.
>   
>   This is a mechanical move and no tuning parameters are changed.
>   
>   The pre-allocated callout array is only used for legacy timeout(9)
>   calls and is only allocated and active on cpu0.  Eventually all
>   remaining users of timeout(9) should switch to the callout_* API.
>   

In the meantime, until all legacy timeout(9) users are updated, I think
that it would be wise to retain the comment that describes where the
magic number 18508 comes from.

Regards,
Alan

>   Reviewed by:	davide
>
> Modified:
>   head/sys/kern/kern_timeout.c
>   head/sys/kern/subr_param.c
>   head/sys/sys/callout.h
>
> Modified: head/sys/kern/kern_timeout.c
> ==============================================================================
> --- head/sys/kern/kern_timeout.c	Fri Mar  8 08:19:50 2013	(r248030)
> +++ head/sys/kern/kern_timeout.c	Fri Mar  8 10:14:58 2013	(r248031)
> _at__at_ -47,6 +47,7 _at__at_ __FBSDID("$FreeBSD$");
>  #include <sys/systm.h>
>  #include <sys/bus.h>
>  #include <sys/callout.h>
> +#include <sys/file.h>
>  #include <sys/interrupt.h>
>  #include <sys/kernel.h>
>  #include <sys/ktr.h>
> _at__at_ -101,6 +102,11 _at__at_ SYSCTL_INT(_debug, OID_AUTO, to_avg_mpca
>      0, "Average number of MP direct callouts made per callout_process call. "
>      "Units = 1/1000");
>  #endif
> +
> +static int ncallout;
> +SYSCTL_INT(_kern, OID_AUTO, ncallout, CTLFLAG_RDTUN, &ncallout, 0,
> +    "Number of entries in callwheel and size of timeout() preallocation");
> +
>  /*
>   * TODO:
>   *	allocate more timeout table slots when table overflows.
> _at__at_ -252,6 +258,14 _at__at_ kern_timeout_callwheel_alloc(caddr_t v)
>  
>  	timeout_cpu = PCPU_GET(cpuid);
>  	cc = CC_CPU(timeout_cpu);
> +
> +	/*
> +	 * Calculate the size of the callout wheel and the preallocated
> +	 * timeout() structures.
> +	 */
> +	ncallout = imin(16 + maxproc + maxfiles, 18508);
> +	TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
> +
>  	/*
>  	 * Calculate callout wheel size, should be next power of two higher
>  	 * than 'ncallout'.
>
> Modified: head/sys/kern/subr_param.c
> ==============================================================================
> --- head/sys/kern/subr_param.c	Fri Mar  8 08:19:50 2013	(r248030)
> +++ head/sys/kern/subr_param.c	Fri Mar  8 10:14:58 2013	(r248031)
> _at__at_ -91,7 +91,6 _at__at_ int	maxprocperuid;			/* max # of procs p
>  int	maxfiles;			/* sys. wide open files limit */
>  int	maxfilesperproc;		/* per-proc open files limit */
>  int	msgbufsize;			/* size of kernel message buffer */
> -int	ncallout;			/* maximum # of timer events */
>  int	nbuf;
>  int	ngroups_max;			/* max # groups per process */
>  int	nswbuf;
> _at__at_ -109,8 +108,6 _at__at_ u_long	sgrowsiz;			/* amount to grow sta
>  
>  SYSCTL_INT(_kern, OID_AUTO, hz, CTLFLAG_RDTUN, &hz, 0,
>      "Number of clock ticks per second");
> -SYSCTL_INT(_kern, OID_AUTO, ncallout, CTLFLAG_RDTUN, &ncallout, 0,
> -    "Number of pre-allocated timer events");
>  SYSCTL_INT(_kern, OID_AUTO, nbuf, CTLFLAG_RDTUN, &nbuf, 0,
>      "Number of buffers in the buffer cache");
>  SYSCTL_INT(_kern, OID_AUTO, nswbuf, CTLFLAG_RDTUN, &nswbuf, 0,
> _at__at_ -327,15 +324,6 _at__at_ init_param2(long physpages)
>  	TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
>  
>  	/*
> -	 * XXX: Does the callout wheel have to be so big?
> -	 *
> -	 * Clip callout to result of previous function of maxusers maximum
> -	 * 384.  This is still huge, but acceptable.
> -	 */
> -	ncallout = imin(16 + maxproc + maxfiles, 18508);
> -	TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
> -
> -	/*
>  	 * The default for maxpipekva is min(1/64 of the kernel address space,
>  	 * max(1/64 of main memory, 512KB)).  See sys_pipe.c for more details.
>  	 */
>
> Modified: head/sys/sys/callout.h
> ==============================================================================
> --- head/sys/sys/callout.h	Fri Mar  8 08:19:50 2013	(r248030)
> +++ head/sys/sys/callout.h	Fri Mar  8 10:14:58 2013	(r248031)
> _at__at_ -63,8 +63,6 _at__at_ struct callout_handle {
>  };
>  
>  #ifdef _KERNEL
> -extern int ncallout;
> -
>  #define	callout_active(c)	((c)->c_flags & CALLOUT_ACTIVE)
>  #define	callout_deactivate(c)	((c)->c_flags &= ~CALLOUT_ACTIVE)
>  #define	callout_drain(c)	_callout_stop_safe(c, 1)
>
Received on Fri Mar 08 2013 - 18:17:38 UTC