150 likes | 182 Views
Linux Scheduler. Objectives. Response time Throughput for batch No starvation Accommodate high AND low priority. General Process Classifications. Two schemes for classifying: Traditional classes IO bound CPU bound Alternative classes Interactive Batch Real-time
E N D
Objectives • Response time • Throughput for batch • No starvation • Accommodate high AND low priority
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?
Linux Scheduling Classes • FIFO FIFO real-time process • RR Round Robin real-time process • Normal non-real-time process
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
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 100-139) • Max(100, min(sp-bonus+5,139)) • 0<=bonus<=10
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:
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)
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
Priority arrays – revisited • Two arrays (active/expired): *listheads prio_array[2][140]; typedef struct listheads { // 2-way list of PDs @ this priority PD *next; PD *prev;} struct PD { PD *next; PD*prev; int PID; int prio; // etc }
Scheduling • Pick highest priority non-empty queue/list • Tasks in queue/list scheduled
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