Presentation is loading. Please wait.

Presentation is loading. Please wait.

Linux Scheduler © DJ Foreman 3/8/2009.

Similar presentations


Presentation on theme: "Linux Scheduler © DJ Foreman 3/8/2009."— Presentation transcript:

1 Linux Scheduler © DJ Foreman 3/8/2009

2 Objectives Response time Throughput for batch No starvation
Accommodate high AND low priority © DJ Foreman 3/8/2009

3 General Process Classifications
Two schemes for classifying: Traditional classes IO bound CPU bound Alternative classes Interactive Batch Real-time Video, robotics, sensor-based How to determine? © DJ Foreman 3/8/2009

4 Linux Scheduling Classes
FIFO FIFO real-time process RR Round Robin real-time process Normal non-real-time process © DJ Foreman 3/8/2009

5 Real-time Details © DJ Foreman 3/8/2009

6 Real-time Rules Priority 0(highest) - 99(lowest)
Program adjustable: sched_setparam() sched_setscheduler() FIFO - non-interruptible except Higher priority Blocked Yields RR Adds a time-slice to each thread Suspends at end of slice © DJ Foreman 3/8/2009

7 Non-real-time Scheduling (Conventional processes)
© DJ Foreman 3/8/2009

8 Rules Every process has a “static” priority
100(highest) – 139 (lowest) Variable via nice() and setpriority() Base quantum (not a constant!) If sp<120 20*(140-static priority) If sp>=120 5*(140-static priority) Dynamic priority (also ) Max(100, min(sp-bonus+5,139)) 0<=bonus<=10 © DJ Foreman 3/8/2009

9 Rules (continued) Bonus 0-5 is a penalty 6-10 is a prize
Related to average sleep time OF THIS PROCESS (not of all Processes) Based on past history Some sample values: Average sleep time Bonus 0<=N<100ms 300<=N<400ms 3 600<=N<700 6 900<=N<1000 9 © DJ Foreman 3/8/2009

10 Priority Arrays Two arrays: struct prio_array { int nr_active;
unsigned long bitmap[BITMAP_SIZE]; struct list_head queue[MAX_PRIO]; } With: 140 priority levels (max) wordsize=32 bits BITMAP_SIZE is 5 (last 20 bits ignored) © DJ Foreman 3/8/2009

11 The Bitmaps Active queues Time-slice-expired queues
1 bit/queue (140 queues) Based on the Intel “bsf/bsr” instruction Select least significant 1-bit © DJ Foreman 3/8/2009

12 Priority arrays – revisited
Two arrays (active/expired): *listheads prio_array[2][140]; typedef struct listheads { // 2-way list of this priority PD *next; PD *prev;} struct PD { PD *next; PD*prev; int PID; int prio; // etc } © DJ Foreman 3/8/2009

13 Scheduling Pick highest priority non-empty queue/list
Tasks in queue/list scheduled © DJ Foreman 3/8/2009

14 References Lindsey, R., "What's New in the 2.6 Scheduler", Linux Journal, March 2004 Love, R., Linux Kernel Development, Indianapolis, IN, Sams Publishing, 2004 Understanding the Linux Kernel, Bovet & Cesati, O’Reilly Press, 2006 © DJ Foreman 3/8/2009


Download ppt "Linux Scheduler © DJ Foreman 3/8/2009."

Similar presentations


Ads by Google