xref: /netbsd-src/share/man/man9/csf.9 (revision 4b3129d595d0eae94507356eda9e5f387496cb5a)
1*4b3129d5Sprlw1.\"     $NetBSD: csf.9,v 1.9 2015/05/25 21:02:37 prlw1 Exp $
24f02ad43Sdsieger.\"
34f02ad43Sdsieger.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
44f02ad43Sdsieger.\" All rights reserved.
54f02ad43Sdsieger.\"
64f02ad43Sdsieger.\" This code is derived from software contributed to The NetBSD Foundation
74f02ad43Sdsieger.\" by Daniel Sieger.
84f02ad43Sdsieger.\"
94f02ad43Sdsieger.\" Redistribution and use in source and binary forms, with or without
104f02ad43Sdsieger.\" modification, are permitted provided that the following conditions
114f02ad43Sdsieger.\" are met:
124f02ad43Sdsieger.\" 1. Redistributions of source code must retain the above copyright
134f02ad43Sdsieger.\"    notice, this list of conditions and the following disclaimer.
144f02ad43Sdsieger.\" 2. Redistributions in binary form must reproduce the above copyright
154f02ad43Sdsieger.\"    notice, this list of conditions and the following disclaimer in the
164f02ad43Sdsieger.\"    documentation and/or other materials provided with the distribution.
174f02ad43Sdsieger.\"
184f02ad43Sdsieger.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
194f02ad43Sdsieger.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
204f02ad43Sdsieger.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
214f02ad43Sdsieger.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
224f02ad43Sdsieger.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
234f02ad43Sdsieger.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
244f02ad43Sdsieger.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
254f02ad43Sdsieger.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
264f02ad43Sdsieger.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
274f02ad43Sdsieger.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
284f02ad43Sdsieger.\" POSSIBILITY OF SUCH DAMAGE.
294f02ad43Sdsieger.\"
3043a4fb99Schristos.Dd October 27, 2014
314f02ad43Sdsieger.Dt CSF 9
324f02ad43Sdsieger.Os
334f02ad43Sdsieger.Sh NAME
344f02ad43Sdsieger.Nm CSF
354f02ad43Sdsieger.Nd The
364f02ad43Sdsieger.Nx
374f02ad43Sdsiegercommon scheduler framework
384f02ad43Sdsieger.Sh SYNOPSIS
394f02ad43Sdsieger.In sys/sched.h
404f02ad43Sdsieger.Ft void
414f02ad43Sdsieger.Fn sched_rqinit "void"
424f02ad43Sdsieger.Ft void
434f02ad43Sdsieger.Fn sched_setup "void"
444f02ad43Sdsieger.Ft void
454f02ad43Sdsieger.Fn sched_cpuattach "struct cpu_info *"
464f02ad43Sdsieger.Ft void
474f02ad43Sdsieger.Fn sched_tick "struct cpu_info *"
484f02ad43Sdsieger.Ft void
494f02ad43Sdsieger.Fn sched_schedclock "lwp_t *"
504f02ad43Sdsieger.Ft bool
514f02ad43Sdsieger.Fn sched_curcpu_runnable_p "void"
524f02ad43Sdsieger.Ft lwp_t *
534f02ad43Sdsieger.Fn sched_nextlwp "void"
544f02ad43Sdsieger.Ft void
55c01b8826Swiz.Fn sched_enqueue "lwp_t *" "bool"
564f02ad43Sdsieger.Ft void
574f02ad43Sdsieger.Fn sched_dequeue "lwp_t *"
584f02ad43Sdsieger.Ft void
59c01b8826Swiz.Fn sched_nice "struct proc *" "int"
604f02ad43Sdsieger.Ft void
61c01b8826Swiz.Fn sched_proc_fork "struct proc *" "struct proc *"
624f02ad43Sdsieger.Ft void
63c01b8826Swiz.Fn sched_proc_exit "struct proc *" "struct proc *"
644f02ad43Sdsieger.Ft void
654f02ad43Sdsieger.Fn sched_lwp_fork "lwp_t *"
664f02ad43Sdsieger.Ft void
674f02ad43Sdsieger.Fn sched_lwp_exit "lwp_t *"
684f02ad43Sdsieger.Ft void
694f02ad43Sdsieger.Fn sched_setrunnable "lwp_t *"
704f02ad43Sdsieger.Ft void
714f02ad43Sdsieger.Fn sched_print_runqueue "void (*pr)(const char *, ...)"
724f02ad43Sdsieger.Ft void
73c01b8826Swiz.Fn sched_pstats_hook "struct proc *" "int"
744f02ad43Sdsieger.Ft void
754f02ad43Sdsieger.Fn sched_pstats "void *arg"
764f02ad43Sdsieger.Ft pri_t
774f02ad43Sdsieger.Fn sched_kpri "lwp_t *"
784f02ad43Sdsieger.Ft void
794f02ad43Sdsieger.Fn resched_cpu "lwp_t *"
804f02ad43Sdsieger.Ft void
814f02ad43Sdsieger.Fn setrunnable
824f02ad43Sdsieger.Ft void
834f02ad43Sdsieger.Fn schedclock "lwp_t *"
844f02ad43Sdsieger.Ft void
854f02ad43Sdsieger.Fn sched_init "void"
864f02ad43Sdsieger.Sh DESCRIPTION
87c01b8826Swiz.Nm
88c01b8826Swizprovides a modular and self-contained interface for
89c01b8826Swizimplementing different thread scheduling algorithms.
90c01b8826SwizThe different schedulers can be selected at compile-time.
91b9e73747SahokaCurrently, the schedulers available are
92eeeb9eddSdsieger.Xr sched_4bsd 9 ,
93b9e73747Sahokathe traditional 4.4BSD thread scheduler, and
94b9e73747Sahoka.Xr sched_m2 9
95*4b3129d5Sprlw1which implements a SVR4/Solaris like approach.
964f02ad43Sdsieger.Pp
974f02ad43SdsiegerThe interface is divided into two parts: A set of functions each
984f02ad43Sdsiegerscheduler needs to implement and common functions used by all
994f02ad43Sdsiegerschedulers.
1004f02ad43Sdsieger.Sh Scheduler-specific functions
1014f02ad43SdsiegerThe following functions have to be implemented by the individual
1024f02ad43Sdsiegerscheduler.
1034f02ad43Sdsieger.Ss Scheduler initialization
1049c481508Sjoerg.Bl -tag -width compact
1054f02ad43Sdsieger.It Ft void Fn sched_cpuattach "struct cpu_info *"
1064f02ad43SdsiegerPer-CPU scheduler initialization routine.
1074f02ad43Sdsieger.It Ft void Fn sched_rqinit "void"
1084f02ad43SdsiegerInitialize the scheduler's runqueue data structures.
1094f02ad43Sdsieger.It Ft void Fn sched_setup "void"
1104f02ad43SdsiegerSetup initial scheduling parameters and kick off timeout driven
1114f02ad43Sdsiegerevents.
1124f02ad43Sdsieger.El
1134f02ad43Sdsieger.Ss Runqueue handling
114c01b8826SwizRunqueue handling is completely internal to the scheduler.
115c01b8826SwizOther parts of the kernel should access runqueues only through the
116c01b8826Swizfollowing functions:
1179c481508Sjoerg.Bl -tag -width compact
118c01b8826Swiz.It Ft void Fn sched_enqueue "lwp_t *" "bool"
1194f02ad43SdsiegerPlace an LWP within the scheduler's runqueue structures.
1204f02ad43Sdsieger.It Ft void Fn sched_dequeue "lwp_t *"
1214f02ad43SdsiegerRemove an LWP from the scheduler's runqueue structures.
1224f02ad43Sdsieger.It Ft lwp_t * Fn sched_nextlwp "void"
1234f02ad43SdsiegerReturn the LWP that should run the CPU next.
1244f02ad43Sdsieger.It Ft bool Fn sched_curcpu_runnable_p "void"
1254f02ad43SdsiegerIndicate if there is a runnable LWP for the current CPU.
1264f02ad43Sdsieger.It Ft void Fn sched_print_runqueue "void (*pr)(const char *, ...)"
1274f02ad43SdsiegerPrint runqueues in DDB.
1284f02ad43Sdsieger.El
1294f02ad43Sdsieger.Ss Core scheduler functions
1309c481508Sjoerg.Bl -tag -width compact
1314f02ad43Sdsieger.It Ft void Fn sched_tick "struct cpu_info *"
132c01b8826SwizPeriodically called from
133c01b8826Swiz.Xr hardclock 9 .
134c01b8826SwizDetermines if a reschedule is necessary, if the running LWP has
135c01b8826Swizused up its quantum.
1364f02ad43Sdsieger.It Ft void Fn sched_schedclock "lwp_t *"
1374f02ad43SdsiegerPeriodically called from
1384f02ad43Sdsieger.Fn schedclock
1394f02ad43Sdsiegerin order to handle priority adjustment.
1404f02ad43Sdsieger.El
1414f02ad43Sdsieger.Ss Priority adjustment
1429c481508Sjoerg.Bl -tag -width compact
14343a4fb99Schristos.It Ft void Fn sched_nice "struct proc *" "int"
1444f02ad43SdsiegerRecalculate the process priority according to its nice value.
1454f02ad43Sdsieger.El
1464f02ad43Sdsieger.Ss General helper functions
1479c481508Sjoerg.Bl -tag -width compact
148c01b8826Swiz.It Ft void Fn sched_proc_fork "struct proc *" "struct proc *"
1494f02ad43SdsiegerInherit the scheduling history of the parent process after
1504f02ad43Sdsieger.Fn fork .
151c01b8826Swiz.It Ft void Fn sched_proc_exit "struct proc *" "struct proc *"
1524f02ad43SdsiegerCharge back a processes parent for its resource usage.
1534f02ad43Sdsieger.It Ft void Fn sched_lwp_fork "lwp_t *"
1544f02ad43SdsiegerLWP-specific version of the above
1554f02ad43Sdsieger.It Ft void Fn sched_lwp_exit "lwp_t *"
1564f02ad43SdsiegerLWP-specific version of the above
1574f02ad43Sdsieger.It Ft void Fn sched_setrunnable "lwp_t *"
1584f02ad43SdsiegerScheduler-specific actions for
1594f02ad43Sdsieger.Fn setrunnable .
160c01b8826Swiz.It Ft void Fn sched_pstats_hook "struct proc *" "int"
1614f02ad43SdsiegerScheduler-specific actions for
1624f02ad43Sdsieger.Fn sched_pstats .
1634f02ad43Sdsieger.El
1644f02ad43Sdsieger.Sh Common scheduler functions
1659c481508Sjoerg.Bl -tag -width compact
1664f02ad43Sdsieger.It Ft pri_t Fn sched_kpri "lwp_t *"
1674f02ad43SdsiegerScale a priority level to a kernel priority level, usually for an LWP
1684f02ad43Sdsiegerthat is about to sleep.
1694f02ad43Sdsieger.It Ft void Fn sched_pstats "void *"
1704f02ad43SdsiegerUpdate process statistics and check CPU resource allocation.
1714f02ad43Sdsieger.It Ft inline void Fn resched_cpu "lwp_t *"
1724f02ad43SdsiegerArrange for a reschedule.
1734f02ad43Sdsieger.It Ft void Fn setrunnable "lwp_t *"
1744f02ad43SdsiegerChange process state to be runnable, placing it on a runqueue if it
1754f02ad43Sdsiegeris in memory, awakening the swapper otherwise.
1764f02ad43Sdsieger.It Ft void Fn schedclock "lwp_t *"
177c01b8826SwizScheduler clock.
178c01b8826SwizPeriodically called from
1794f02ad43Sdsieger.Fn statclock .
1804f02ad43Sdsieger.It Ft void Fn sched_init "void"
1814f02ad43SdsiegerInitialize callout for
1824f02ad43Sdsieger.Fn sched_pstats
1834f02ad43Sdsiegerand call
1844f02ad43Sdsieger.Fn sched_setup
1854f02ad43Sdsiegerto initialize any other scheduler-specific data.
1864f02ad43Sdsieger.El
1874f02ad43Sdsieger.Sh CODE REFERENCES
188c01b8826SwizThe
189c01b8826Swiz.Nm
190c01b8826Swizprogramming interface is defined within the file
1914f02ad43Sdsieger.Pa sys/sys/sched.h .
1924f02ad43Sdsieger.Pp
1934f02ad43SdsiegerFunctions common to all scheduler implementations are in
194c01b8826Swiz.Pa sys/kern/kern_synch.c .
1954f02ad43Sdsieger.Pp
1964f02ad43SdsiegerThe traditional 4.4BSD scheduler is implemented in
197c01b8826Swiz.Pa sys/kern/sched_4bsd.c .
198b9e73747Sahoka.Pp
199b9e73747SahokaThe M2 scheduler is implemented in
200b9e73747Sahoka.Pa sys/kern/sched_m2.c .
2014f02ad43Sdsieger.Sh SEE ALSO
202eeeb9eddSdsieger.Xr mi_switch 9 ,
203c01b8826Swiz.Xr preempt 9 ,
204b9e73747Sahoka.Xr sched_4bsd 9 ,
205b9e73747Sahoka.Xr sched_m2 9
2064f02ad43Sdsieger.Sh HISTORY
2074f02ad43SdsiegerThe
2084f02ad43Sdsieger.Nm
2094f02ad43Sdsiegerappeared in
2104f02ad43Sdsieger.Nx 5.0 .
2114f02ad43Sdsieger.Sh AUTHORS
2124f02ad43SdsiegerThe
2134f02ad43Sdsieger.Nm
2144f02ad43Sdsiegerwas written by
2154f02ad43Sdsieger.An Daniel Sieger
2164f02ad43Sdsieger.Aq dsieger@NetBSD.org .
217