Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Mar 2013 10:14:58 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r248031 - in head/sys: kern sys
Message-ID:  <201303081014.r28AEwet053196@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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)



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