sched: use util instead of capacity to select busy cpu
authorTodd Kjos <tkjos@google.com>
Wed, 13 Jul 2016 23:13:47 +0000 (16:13 -0700)
committerAmit Pundir <amit.pundir@linaro.org>
Wed, 14 Sep 2016 09:32:22 +0000 (15:02 +0530)
If cpus are busy, the cpu selection algorithm was favoring
cpus with lower capacity. This can result in uneven packing
since there will be a bias toward the same cpu until there
is a capacity change. Instead use the utilization so there
is immediate feedback as tasks are assigned

BUG: 30115868

Change-Id: I0ac7ae3ab5d8f2f5a5838c29bb6da2c3e8ef44e8

kernel/sched/fair.c

index a45a6e1a692c9a6e1f1823a7ce46c7cbb58accce..26c7e3fd332f7b8dfa0aad28c5c43595b8fa1f1b 100644 (file)
@@ -5614,7 +5614,7 @@ static inline int find_best_target(struct task_struct *p, bool boosted)
 {
        int iter_cpu;
        int target_cpu = -1;
-       int target_capacity = 0;
+       int target_util = 0;
        int backup_capacity = 0;
        int best_idle_cpu = -1;
        int best_idle_cstate = INT_MAX;
@@ -5670,10 +5670,10 @@ static inline int find_best_target(struct task_struct *p, bool boosted)
 
                if (new_util < cur_capacity) {
                        if (cpu_rq(i)->nr_running) {
-                               if (target_capacity == 0 ||
-                                       target_capacity > cur_capacity) {
+                               if (target_util == 0 ||
+                                       target_util > new_util) {
                                        target_cpu = i;
-                                       target_capacity = cur_capacity;
+                                       target_util = new_util;
                                }
                        } else if (!boosted) {
                                if (best_idle_cpu < 0 ||