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.
  
  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)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to