completely fair scheduler alireza heidari. introduction the completely fair scheduler (cfs) is a...

14
Completely Fair Scheduler Alireza Heidari

Upload: anaya-woll

Post on 15-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Completely Fair Scheduler

Alireza Heidari

Page 2: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Introduction

• The Completely Fair Scheduler (CFS) is a process scheduler .

• Merged into the 2.6.23 release of the Linux kernel and is the default scheduler.

• Maximize overall CPU utilization while also maximizing interactive performance

• CFS does not use the old data structures for the runqueues, but it uses a time-ordered red black tree to build a "timeline" of future task execution

Page 3: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Introduction

• CFS basically models an "ideal, precise multi-tasking CPU" on real hardware.

• "Ideal multi-tasking CPU" is a (non-existent :-)) CPU that has 100% physical power and which can run each task at precise equal speed, in parallel, each at 1/nr_running speed. For example: if there are 2 tasks running, then it runs each at 50% physical power i.e., actually in parallel.

Page 4: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Red–black tree Properties

• A node is either red or black.

• The root is black. (This rule is sometimes omitted. Since the root can always be changed from red to black, but not necessarily vice-versa, this rule has little effect on analysis.)

• All leaves (NIL) are black. (All leaves are same color as the root.)

• Every red node must have two black child nodes.

• Every path from a given node to any of its descendant leaves contains the same number of black nodes.

Page 5: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Red–black tree Properties

Page 6: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

CFS

• On real hardware, we can run only a single task at once, so we have to introduce the concept of "virtual runtime."

• The virtual runtime of a task specifies when its next timeslice would start execution on the ideal multi-tasking CPU described above.

• In practice, the virtual runtime of a task is its actual runtime normalized to the total number of running tasks.

Page 7: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

CFS

• In CFS the virtual runtime is expressed and tracked via the per-task p->se.vruntime (nanosec-unit) value.

• This way, it's possible to accurately timestamp and measure the "expected CPU time" a task should have gotten.

• On "ideal" hardware, at any time all tasks would have the same p->se.vruntime value i.e., tasks would execute simultaneously and no task would ever get "out of balance" from the "ideal" share of CPU time.

Page 8: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

CFS

• CFS's task picking logic is based on this p->se.vruntime value

• It always tries to run the task with the smallest p->se.vruntime value (i.e., the task which executed least so far).

• The total number of running tasks in the runqueue is accounted through the rq->cfs.load value, which is the sum of the weights of the tasks queued on the runqueue.

Page 9: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

CFS

• All runnable tasks are sorted by the p->se.vruntime key.

• CFS picks the "leftmost" task from the tree.

• the executed tasks are put into the tree more and more to the right, slowly but surely giving a chance for every task to become the "leftmost task" and thus get on the CPU within a deterministic amount of time.

Page 10: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Summing up

1. It runs a task a bit.

2. When the task schedules (or a scheduler tick happens) the task's CPU usage is "accounted for“.

3. The (small) time it just spent using the physical CPU is added to p->se.vruntime.

4. Once p->se.vruntime gets high enough so that another task becomes the "leftmost task" of the time-ordered rbtree it maintains ("granularity" )

5. The new leftmost task is picked and the current task is preempted.

Page 11: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

CFS detail

• The left most node of the scheduling tree is chosen (as it will have the lowest spent execution time), and sent for execution.

• If the process simply completes execution, it is removed from the system and scheduling tree.

• If the process reaches its maximum execution time or is otherwise stopped (voluntarily or via interrupt) it is reinserted into the scheduling tree based on its new spent execution time.

• The new left-most node will then be selected from the tree, repeating the iteration.

Page 12: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

SCHEDULING CLASSES

• enqueue_task(...) Called when a task enters a runnable state.It puts the scheduling entity (task) into the red-black tree and increments the nr_running variable.

• dequeue_task(...) When a task is no longer runnable, this function is called to keep the corresponding scheduling entity out of the red-black tree.It decrements the nr_running variable.

Page 13: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

SCHEDULING CLASSES

• check_preempt_curr(...) This function checks if a task that entered the runnable state should preempt the currently running task.

• pick_next_task(...) This function chooses the most appropriate task eligible to run next.

• set_curr_task(...) This function is called when a task changes its scheduling class or changes its task group.

• task_tick(...) This function is mostly called from time tick functions; it might lead to process switch. This drives the running preemption.

Page 14: Completely Fair Scheduler Alireza Heidari. Introduction The Completely Fair Scheduler (CFS) is a process scheduler. Merged into the 2.6.23 release of

Question?