mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
sched, documentation: remove old O(1) scheduler document
Since we don't have O(1) scheduler implementation anymore, remove the legacy doc. Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5512b3ece0
commit
72fd455ba5
2 changed files with 0 additions and 128 deletions
|
@ -2,8 +2,6 @@
|
||||||
- this file.
|
- this file.
|
||||||
sched-arch.txt
|
sched-arch.txt
|
||||||
- CPU Scheduler implementation hints for architecture specific code.
|
- CPU Scheduler implementation hints for architecture specific code.
|
||||||
sched-coding.txt
|
|
||||||
- reference for various scheduler-related methods in the O(1) scheduler.
|
|
||||||
sched-design-CFS.txt
|
sched-design-CFS.txt
|
||||||
- goals, design and implementation of the Complete Fair Scheduler.
|
- goals, design and implementation of the Complete Fair Scheduler.
|
||||||
sched-domains.txt
|
sched-domains.txt
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
Reference for various scheduler-related methods in the O(1) scheduler
|
|
||||||
Robert Love <rml@tech9.net>, MontaVista Software
|
|
||||||
|
|
||||||
|
|
||||||
Note most of these methods are local to kernel/sched.c - this is by design.
|
|
||||||
The scheduler is meant to be self-contained and abstracted away. This document
|
|
||||||
is primarily for understanding the scheduler, not interfacing to it. Some of
|
|
||||||
the discussed interfaces, however, are general process/scheduling methods.
|
|
||||||
They are typically defined in include/linux/sched.h.
|
|
||||||
|
|
||||||
|
|
||||||
Main Scheduling Methods
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
void load_balance(runqueue_t *this_rq, int idle)
|
|
||||||
Attempts to pull tasks from one cpu to another to balance cpu usage,
|
|
||||||
if needed. This method is called explicitly if the runqueues are
|
|
||||||
imbalanced or periodically by the timer tick. Prior to calling,
|
|
||||||
the current runqueue must be locked and interrupts disabled.
|
|
||||||
|
|
||||||
void schedule()
|
|
||||||
The main scheduling function. Upon return, the highest priority
|
|
||||||
process will be active.
|
|
||||||
|
|
||||||
|
|
||||||
Locking
|
|
||||||
-------
|
|
||||||
|
|
||||||
Each runqueue has its own lock, rq->lock. When multiple runqueues need
|
|
||||||
to be locked, lock acquires must be ordered by ascending &runqueue value.
|
|
||||||
|
|
||||||
A specific runqueue is locked via
|
|
||||||
|
|
||||||
task_rq_lock(task_t pid, unsigned long *flags)
|
|
||||||
|
|
||||||
which disables preemption, disables interrupts, and locks the runqueue pid is
|
|
||||||
running on. Likewise,
|
|
||||||
|
|
||||||
task_rq_unlock(task_t pid, unsigned long *flags)
|
|
||||||
|
|
||||||
unlocks the runqueue pid is running on, restores interrupts to their previous
|
|
||||||
state, and reenables preemption.
|
|
||||||
|
|
||||||
The routines
|
|
||||||
|
|
||||||
double_rq_lock(runqueue_t *rq1, runqueue_t *rq2)
|
|
||||||
|
|
||||||
and
|
|
||||||
|
|
||||||
double_rq_unlock(runqueue_t *rq1, runqueue_t *rq2)
|
|
||||||
|
|
||||||
safely lock and unlock, respectively, the two specified runqueues. They do
|
|
||||||
not, however, disable and restore interrupts. Users are required to do so
|
|
||||||
manually before and after calls.
|
|
||||||
|
|
||||||
|
|
||||||
Values
|
|
||||||
------
|
|
||||||
|
|
||||||
MAX_PRIO
|
|
||||||
The maximum priority of the system, stored in the task as task->prio.
|
|
||||||
Lower priorities are higher. Normal (non-RT) priorities range from
|
|
||||||
MAX_RT_PRIO to (MAX_PRIO - 1).
|
|
||||||
MAX_RT_PRIO
|
|
||||||
The maximum real-time priority of the system. Valid RT priorities
|
|
||||||
range from 0 to (MAX_RT_PRIO - 1).
|
|
||||||
MAX_USER_RT_PRIO
|
|
||||||
The maximum real-time priority that is exported to user-space. Should
|
|
||||||
always be equal to or less than MAX_RT_PRIO. Setting it less allows
|
|
||||||
kernel threads to have higher priorities than any user-space task.
|
|
||||||
MIN_TIMESLICE
|
|
||||||
MAX_TIMESLICE
|
|
||||||
Respectively, the minimum and maximum timeslices (quanta) of a process.
|
|
||||||
|
|
||||||
Data
|
|
||||||
----
|
|
||||||
|
|
||||||
struct runqueue
|
|
||||||
The main per-CPU runqueue data structure.
|
|
||||||
struct task_struct
|
|
||||||
The main per-process data structure.
|
|
||||||
|
|
||||||
|
|
||||||
General Methods
|
|
||||||
---------------
|
|
||||||
|
|
||||||
cpu_rq(cpu)
|
|
||||||
Returns the runqueue of the specified cpu.
|
|
||||||
this_rq()
|
|
||||||
Returns the runqueue of the current cpu.
|
|
||||||
task_rq(pid)
|
|
||||||
Returns the runqueue which holds the specified pid.
|
|
||||||
cpu_curr(cpu)
|
|
||||||
Returns the task currently running on the given cpu.
|
|
||||||
rt_task(pid)
|
|
||||||
Returns true if pid is real-time, false if not.
|
|
||||||
|
|
||||||
|
|
||||||
Process Control Methods
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
void set_user_nice(task_t *p, long nice)
|
|
||||||
Sets the "nice" value of task p to the given value.
|
|
||||||
int setscheduler(pid_t pid, int policy, struct sched_param *param)
|
|
||||||
Sets the scheduling policy and parameters for the given pid.
|
|
||||||
int set_cpus_allowed(task_t *p, unsigned long new_mask)
|
|
||||||
Sets a given task's CPU affinity and migrates it to a proper cpu.
|
|
||||||
Callers must have a valid reference to the task and assure the
|
|
||||||
task not exit prematurely. No locks can be held during the call.
|
|
||||||
set_task_state(tsk, state_value)
|
|
||||||
Sets the given task's state to the given value.
|
|
||||||
set_current_state(state_value)
|
|
||||||
Sets the current task's state to the given value.
|
|
||||||
void set_tsk_need_resched(struct task_struct *tsk)
|
|
||||||
Sets need_resched in the given task.
|
|
||||||
void clear_tsk_need_resched(struct task_struct *tsk)
|
|
||||||
Clears need_resched in the given task.
|
|
||||||
void set_need_resched()
|
|
||||||
Sets need_resched in the current task.
|
|
||||||
void clear_need_resched()
|
|
||||||
Clears need_resched in the current task.
|
|
||||||
int need_resched()
|
|
||||||
Returns true if need_resched is set in the current task, false
|
|
||||||
otherwise.
|
|
||||||
yield()
|
|
||||||
Place the current process at the end of the runqueue and call schedule.
|
|
Loading…
Reference in a new issue