summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Kjos <tkjos@google.com>2016-07-13 16:13:47 -0700
committerJohn Stultz <john.stultz@linaro.org>2016-08-11 14:26:48 -0700
commitd4cda03828f5c8eae35efcb08f520f8f1a35950e (patch)
tree08e7148be4d1504ec2ca21303fef762717e20d4c
parent23ed57dbcc14871af54db667d460aba64eaf6efe (diff)
sched: use util instead of capacity to select busy cpu
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
-rw-r--r--kernel/sched/fair.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 0b065ff2f4f3..7b6e95aa7360 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5593,7 +5593,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;
@@ -5649,10 +5649,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 ||