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
This commit is contained in:
parent
08907adea3
commit
f8ccf82a4c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=248031
@ -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_mpcalls_dir, CTLFLAG_RD, &avg_mpcalls_dir,
|
||||
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'.
|
||||
|
@ -91,7 +91,6 @@ int maxprocperuid; /* max # of procs per user */
|
||||
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 stack */
|
||||
|
||||
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,
|
||||
@ -326,15 +323,6 @@ init_param2(long physpages)
|
||||
nbuf = NBUF;
|
||||
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.
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user