Providing fair-share scheduling on multicore computing systems via progress balancing
Fair-share scheduling is essential for achieving performance isolation.Current Linux CFS cannot effectively achieve multicore fairness.A task migration policy, progress balancing, is proposed for multicore fairness.The proposed algorithm extends our previous work via mechanism called throttling.It bounds the virtual runtime difference between any pair of tasks by a constant. Performance isolation in a scalable multicore system is often attempted through periodic load balancing paired with per-core fair-share scheduling. Unfortunately, load balancing cannot guarantee the desired level of multicore fairness since it may produce unbounded differences in the progress of tasks. In reality, the balancing of load across cores is only indirectly related to multicore fairness. To address this limitation and ultimately achieve multicore fairness, we propose a new task migration policy we name progress balancing, and present an algorithm for its realization. Progress balancing periodically distributes tasks among cores to directly balance the progress of tasks by bounding their virtual runtime differences. In doing so, it partitions runnable tasks into task groups and allocates them onto cores such that tasks with larger virtual runtimes run on a core with a larger load and thus proceed more slowly. We formally prove the fairness property of our algorithm. To demonstrate its effectiveness, we implemented our algorithm into Linux kernel 3.10 and performed extensive experiments. In the target system, our algorithm yields the maximum virtual runtime difference of 1.07 s, regardless of the uptime of tasks, whereas the Linux CFS produces unbounded virtual runtime differences.