summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/csf.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/csf.9')
-rw-r--r--static/netbsd/man9/csf.9216
1 files changed, 216 insertions, 0 deletions
diff --git a/static/netbsd/man9/csf.9 b/static/netbsd/man9/csf.9
new file mode 100644
index 00000000..ab6418f0
--- /dev/null
+++ b/static/netbsd/man9/csf.9
@@ -0,0 +1,216 @@
+.\" $NetBSD: csf.9,v 1.9 2015/05/25 21:02:37 prlw1 Exp $
+.\"
+.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Daniel Sieger.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd October 27, 2014
+.Dt CSF 9
+.Os
+.Sh NAME
+.Nm CSF
+.Nd The
+.Nx
+common scheduler framework
+.Sh SYNOPSIS
+.In sys/sched.h
+.Ft void
+.Fn sched_rqinit "void"
+.Ft void
+.Fn sched_setup "void"
+.Ft void
+.Fn sched_cpuattach "struct cpu_info *"
+.Ft void
+.Fn sched_tick "struct cpu_info *"
+.Ft void
+.Fn sched_schedclock "lwp_t *"
+.Ft bool
+.Fn sched_curcpu_runnable_p "void"
+.Ft lwp_t *
+.Fn sched_nextlwp "void"
+.Ft void
+.Fn sched_enqueue "lwp_t *" "bool"
+.Ft void
+.Fn sched_dequeue "lwp_t *"
+.Ft void
+.Fn sched_nice "struct proc *" "int"
+.Ft void
+.Fn sched_proc_fork "struct proc *" "struct proc *"
+.Ft void
+.Fn sched_proc_exit "struct proc *" "struct proc *"
+.Ft void
+.Fn sched_lwp_fork "lwp_t *"
+.Ft void
+.Fn sched_lwp_exit "lwp_t *"
+.Ft void
+.Fn sched_setrunnable "lwp_t *"
+.Ft void
+.Fn sched_print_runqueue "void (*pr)(const char *, ...)"
+.Ft void
+.Fn sched_pstats_hook "struct proc *" "int"
+.Ft void
+.Fn sched_pstats "void *arg"
+.Ft pri_t
+.Fn sched_kpri "lwp_t *"
+.Ft void
+.Fn resched_cpu "lwp_t *"
+.Ft void
+.Fn setrunnable
+.Ft void
+.Fn schedclock "lwp_t *"
+.Ft void
+.Fn sched_init "void"
+.Sh DESCRIPTION
+.Nm
+provides a modular and self-contained interface for
+implementing different thread scheduling algorithms.
+The different schedulers can be selected at compile-time.
+Currently, the schedulers available are
+.Xr sched_4bsd 9 ,
+the traditional 4.4BSD thread scheduler, and
+.Xr sched_m2 9
+which implements a SVR4/Solaris like approach.
+.Pp
+The interface is divided into two parts: A set of functions each
+scheduler needs to implement and common functions used by all
+schedulers.
+.Sh Scheduler-specific functions
+The following functions have to be implemented by the individual
+scheduler.
+.Ss Scheduler initialization
+.Bl -tag -width compact
+.It Ft void Fn sched_cpuattach "struct cpu_info *"
+Per-CPU scheduler initialization routine.
+.It Ft void Fn sched_rqinit "void"
+Initialize the scheduler's runqueue data structures.
+.It Ft void Fn sched_setup "void"
+Setup initial scheduling parameters and kick off timeout driven
+events.
+.El
+.Ss Runqueue handling
+Runqueue handling is completely internal to the scheduler.
+Other parts of the kernel should access runqueues only through the
+following functions:
+.Bl -tag -width compact
+.It Ft void Fn sched_enqueue "lwp_t *" "bool"
+Place an LWP within the scheduler's runqueue structures.
+.It Ft void Fn sched_dequeue "lwp_t *"
+Remove an LWP from the scheduler's runqueue structures.
+.It Ft lwp_t * Fn sched_nextlwp "void"
+Return the LWP that should run the CPU next.
+.It Ft bool Fn sched_curcpu_runnable_p "void"
+Indicate if there is a runnable LWP for the current CPU.
+.It Ft void Fn sched_print_runqueue "void (*pr)(const char *, ...)"
+Print runqueues in DDB.
+.El
+.Ss Core scheduler functions
+.Bl -tag -width compact
+.It Ft void Fn sched_tick "struct cpu_info *"
+Periodically called from
+.Xr hardclock 9 .
+Determines if a reschedule is necessary, if the running LWP has
+used up its quantum.
+.It Ft void Fn sched_schedclock "lwp_t *"
+Periodically called from
+.Fn schedclock
+in order to handle priority adjustment.
+.El
+.Ss Priority adjustment
+.Bl -tag -width compact
+.It Ft void Fn sched_nice "struct proc *" "int"
+Recalculate the process priority according to its nice value.
+.El
+.Ss General helper functions
+.Bl -tag -width compact
+.It Ft void Fn sched_proc_fork "struct proc *" "struct proc *"
+Inherit the scheduling history of the parent process after
+.Fn fork .
+.It Ft void Fn sched_proc_exit "struct proc *" "struct proc *"
+Charge back a processes parent for its resource usage.
+.It Ft void Fn sched_lwp_fork "lwp_t *"
+LWP-specific version of the above
+.It Ft void Fn sched_lwp_exit "lwp_t *"
+LWP-specific version of the above
+.It Ft void Fn sched_setrunnable "lwp_t *"
+Scheduler-specific actions for
+.Fn setrunnable .
+.It Ft void Fn sched_pstats_hook "struct proc *" "int"
+Scheduler-specific actions for
+.Fn sched_pstats .
+.El
+.Sh Common scheduler functions
+.Bl -tag -width compact
+.It Ft pri_t Fn sched_kpri "lwp_t *"
+Scale a priority level to a kernel priority level, usually for an LWP
+that is about to sleep.
+.It Ft void Fn sched_pstats "void *"
+Update process statistics and check CPU resource allocation.
+.It Ft inline void Fn resched_cpu "lwp_t *"
+Arrange for a reschedule.
+.It Ft void Fn setrunnable "lwp_t *"
+Change process state to be runnable, placing it on a runqueue if it
+is in memory, awakening the swapper otherwise.
+.It Ft void Fn schedclock "lwp_t *"
+Scheduler clock.
+Periodically called from
+.Fn statclock .
+.It Ft void Fn sched_init "void"
+Initialize callout for
+.Fn sched_pstats
+and call
+.Fn sched_setup
+to initialize any other scheduler-specific data.
+.El
+.Sh CODE REFERENCES
+The
+.Nm
+programming interface is defined within the file
+.Pa sys/sys/sched.h .
+.Pp
+Functions common to all scheduler implementations are in
+.Pa sys/kern/kern_synch.c .
+.Pp
+The traditional 4.4BSD scheduler is implemented in
+.Pa sys/kern/sched_4bsd.c .
+.Pp
+The M2 scheduler is implemented in
+.Pa sys/kern/sched_m2.c .
+.Sh SEE ALSO
+.Xr mi_switch 9 ,
+.Xr preempt 9 ,
+.Xr sched_4bsd 9 ,
+.Xr sched_m2 9
+.Sh HISTORY
+The
+.Nm
+appeared in
+.Nx 5.0 .
+.Sh AUTHORS
+The
+.Nm
+was written by
+.An Daniel Sieger
+.Aq dsieger@NetBSD.org .