svn commit: r248031 - in head/sys: kern sys
Alan Cox
alc at rice.edu
Fri Mar 8 18:17:38 UTC 2013
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)
> @@ -47,6 +47,7 @@ __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>
> @@ -101,6 +102,11 @@ 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.
> @@ -252,6 +258,14 @@ 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)
> @@ -91,7 +91,6 @@ 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;
> @@ -109,8 +108,6 @@ 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,
> @@ -327,15 +324,6 @@ 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)
> @@ -63,8 +63,6 @@ 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)
>
More information about the svn-src-all
mailing list