Add initial manpage for the "new" scheduler API.
Note: More content will follow, to this manpage as well as the NetBSD Internals book. Ok by <ad>
This commit is contained in:
parent
708a0a7fb9
commit
4f02ad43b0
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: mi,v 1.1044 2007/07/14 11:39:01 ad Exp $
|
||||
# $NetBSD: mi,v 1.1045 2007/07/14 20:23:13 dsieger Exp $
|
||||
./etc/mtree/set.comp comp-sys-root
|
||||
./usr/bin/addr2line comp-debug-bin bfd
|
||||
./usr/bin/ar comp-util-bin bfd
|
||||
|
@ -6769,6 +6769,7 @@
|
|||
./usr/share/man/cat9/crypto_newsession.0 comp-sys-catman .cat
|
||||
./usr/share/man/cat9/crypto_register.0 comp-sys-catman .cat
|
||||
./usr/share/man/cat9/crypto_unregister.0 comp-sys-catman .cat
|
||||
./usr/share/man/cat9/csf.0 comp-sys-catman .cat
|
||||
./usr/share/man/cat9/ctxsw.0 comp-obsolete obsolete
|
||||
./usr/share/man/cat9/curcpu.0 comp-sys-catman .cat
|
||||
./usr/share/man/cat9/curproc.0 comp-sys-catman .cat
|
||||
|
@ -11109,6 +11110,7 @@
|
|||
./usr/share/man/man9/crypto_newsession.9 comp-sys-man .man
|
||||
./usr/share/man/man9/crypto_register.9 comp-sys-man .man
|
||||
./usr/share/man/man9/crypto_unregister.9 comp-sys-man .man
|
||||
./usr/share/man/man9/csf.9 comp-sys-man .man
|
||||
./usr/share/man/man9/ctxsw.9 comp-obsolete obsolete
|
||||
./usr/share/man/man9/curcpu.9 comp-sys-man .man
|
||||
./usr/share/man/man9/curproc.9 comp-sys-man .man
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.240 2007/07/14 11:39:01 ad Exp $
|
||||
# $NetBSD: Makefile,v 1.241 2007/07/14 20:23:13 dsieger Exp $
|
||||
|
||||
# Makefile for section 9 (kernel function and variable) manual pages.
|
||||
|
||||
|
@ -12,6 +12,7 @@ MAN= altq.9 arc4random.9 arp.9 audio.9 autoconf.9 \
|
|||
cpu_idle.9 cpu_initclocks.9 cpu_need_resched.9 \
|
||||
cpu_number.9 cpu_reboot.9 cpu_rootconf.9 \
|
||||
cpu_startup.9 cpu_swapout.9 cpu_switchto.9 \
|
||||
csf.9 \
|
||||
curproc.9 \
|
||||
delay.9 disk.9 ddc.9 disklabel.9 dofileread.9 \
|
||||
dopowerhooks.9 do_setresuid.9 doshutdownhooks.9 driver.9 \
|
||||
|
|
|
@ -0,0 +1,214 @@
|
|||
.\" $NetBSD: csf.9,v 1.1 2007/07/14 20:23:12 dsieger 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the NetBSD
|
||||
.\" Foundation, Inc. and its contributors.
|
||||
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
.\" contributors may be used to endorse or promote products derived
|
||||
.\" from this software without specific prior written permission.
|
||||
.\"
|
||||
.\" 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 July 14, 2007
|
||||
.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
|
||||
CSF provides a modular and self-contained interface for
|
||||
implementing different thread scheduling algorithms. The different
|
||||
schedulers can be selected at compile-time.
|
||||
.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
|
||||
.Pp
|
||||
.Bl -tag
|
||||
.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
|
||||
.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
|
||||
.It Ft void Fn sched_tick "struct cpu_info *"
|
||||
Periodically called from hardclock(). 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
|
||||
.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
|
||||
.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
|
||||
.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
|
||||
This section describes places within the
|
||||
.Nx
|
||||
source tree where actual code implementing the scheduler can be found.
|
||||
All pathnames are relative to
|
||||
.Pa /usr/src .
|
||||
.Pp
|
||||
The CSF 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
|
||||
.Sh SEE ALSO
|
||||
.Xr mi_switch 9
|
||||
.Xr preempt 9
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
appeared in
|
||||
.Nx 5.0 .
|
||||
.Sh AUTHORS
|
||||
The
|
||||
.Nm
|
||||
was written by
|
||||
.An Daniel Sieger
|
||||
.Aq dsieger@NetBSD.org .
|
Loading…
Reference in New Issue