210 likes | 325 Views
BFS by Con K olivas Guruprasad Aphale . Real Time Lunch, 10/21/2009. Outline. What is BFS? CFS vs. BFS Design of BFS Design Details Design Decisions Performance Evaluation Comparison with CFS Questions??. Why BFS??. [1]. What is BFS?. A “Fair” Scheduler by Con Kolivas.
E N D
Guruprasad Aphale. BFS by Con Kolivas GuruprasadAphale. Real Time Lunch, 10/21/2009
Guruprasad Aphale. Outline • What is BFS? • CFS vs. BFS • Design of BFS • Design Details • Design Decisions • Performance Evaluation • Comparison with CFS • Questions??
Guruprasad Aphale. Why BFS?? [1]
Guruprasad Aphale. What is BFS? • A “Fair” Scheduler by Con Kolivas. • Simple, Basic Design • Forward Looking Only • Time slice independent of sleep time • Fixed Time slice length • Desktop Oriented Scheduler • Meant for low spec machines • Not supposed to be scaled for large hardware • NUMA unaware
Guruprasad Aphale. Comparison of CFS and BFS
Guruprasad Aphale. Design Details • Virtual Deadline • Task Insertions • Task Selection • Locking
Guruprasad Aphale. Virtual Deadline • “round robin interval” (rr_interval) • Length of time slice in ms • Configurable • Modified based on number of CPUs • rr_interval *= 1 + lg(num_online_cpus) • When a task is created, it is given a time slice and a virtual deadline • Virtual Deadline = jiffies + (user_priority * rr_interval) • user_priority : nice value + 20 (in range 0..39)
Guruprasad Aphale. Virtual Deadline Continued.. • The deadline is a virtual one • No guarantee that a task will be scheduled by this time. • Used to compare which task should go next • Events causing rescheduling • time_slice Exhausted • sleep • preemption
Guruprasad Aphale. Virtual Deadline Continued… • After swapping a task out • put back on queue • task with earliest deadline is chosen from queued but not running tasks. • A problem with this approach • Task’s deadline may already pass before it is chosen for execution. • Indication that the task needs CPU time ahead of all later deadlines.
Guruprasad Aphale. Task Insertion • Has only one global queue which contains sub-queues • Inserts task into relevant queue • Each insertion takes O(1) time as inserting into doubly linked list. • Check if new task can run on any idle CPU or can preempt any other running low priority task. • Don’t wait for schedule to be called if a cpu is idle or low priority task is running • Worst case time O(M), where M is number of CPUs.
Guruprasad Aphale. Insertion New Task to be inserted. SCHED_ISO New Task to be inserted. SCHED_RR (3rd Sub-queue) SCHED_NORMAL SCHED_ISO SCHED_IDLEPRIO tn+1 tn+2 1-100 RT tasks Bitmap 0 0 1 0 0 1 0 1 Array of sub queue heads t1 tj ti tn
Guruprasad Aphale. Task Selection • Check bitmaps to find first set bit. • If the first bit corresponds to a RT sub queue, select first task in the queue • If no bit set in RT queue, then search for next task based on EVDF and suitable CPU affinity. • If a task with expired deadline found, return that task. • In most cases, entire queue lookup is not required.
Guruprasad Aphale. Selection SCHED_NORMAL SCHED_ISO SCHED_IDLEPRIO 1-100 RT tasks Bitmap 0 0 0 0 0 1 0 Array of sub queue heads d=7 d =5 Task removed from queue and assigned to cpu
Guruprasad Aphale. Locking • Only one queue, thus only one lock protecting the process data • So for every operation that modifies the queue, global lock has to be acquired. • Once a task is assigned to a CPU, CPU removes it from queue and creates a local copy of task’s data structure. Thus updates are lockless • Max number of tasks in global queue = number of tasks remaining – number of CPUs + 1
Guruprasad Aphale. Design Decisions • Single Run Queue ( O(n) lookup) • Refers to queued but not running processes • Absence of multiple queues results in no complex interactions among them • Scheduling Decisions based only on CPU Usage • No sleep time taken into consideration during scheduling decisions • No interactivity estimator present
Guruprasad Aphale. Design Decisions • Interactivity in BFS • The tasks that are waking up try to preempt same priority tasks. • Even if they do not preempt, the waiting time for a task is still bounded(because of rr_interval), thus it is scheduled within a timeframe.
Guruprasad Aphale. Performance Evaluation [3] • System Configuration • Dual-core Intel Atom 330 CPU with Hyper-Threading clocked at 2.10GHz Good for Interactive Desktops? People have been doing a lot of benchmarking. But the results are not conclusive.
Guruprasad Aphale. Thank You Questions???
Guruprasad Aphale. References • http://www.linux-magazine.com/Online/News/Con-Kolivas-Introduces-New-BFS-Scheduler • http://www.ibm.com/developerworks/linux/library/l-cfs/ • http://www.phoronix.com/scan.php?page=article&item=bfs_scheduler_benchmarks&num=1
Guruprasad Aphale. Global Queue Structure • Contains 103 subqueues • 100 RT queues • SCHED_ISO queue • SCHED_NORMAL queue • SCHED_IDLEPRIO queue • Each sub queue is a doubly linked list. • While setting up a new task, a bitmap of running priorities is set. • Each bit corresponds to a sub queue inside global queue. • This shows which priorities have waiting tasks.
Guruprasad Aphale. Global Run Queue Structure (Only Queues) SCHED_NORMAL SCHED_ISO SCHED_IDLEPRIO 1-100 RT tasks Bitmap 0 0 1 0 0 1 0 Array of sub queue heads t1 tj ti tn Task Sub queues