kernel/sched: spread big prefer_idle tasks to little cores
Spreading those prefer_idle tasks that are supposed to run on big cores to little cores would help reduce task runnable time. It may help performance in some cases. Bug: 166626809 Test: app launch/uibench/cuj test Change-Id: If496a29128798639db71946fe64847954ff533ca Signed-off-by: Rick Yiu <rickyiu@google.com>
This commit is contained in:
parent
fdab3bbf27
commit
569cba1415
@ -7098,10 +7098,6 @@ static int get_start_cpu(struct task_struct *p, bool sync_boost)
|
||||
rd->max_cap_orig_cpu : rd->mid_cap_orig_cpu;
|
||||
}
|
||||
|
||||
if (start_cpu == rd->mid_cap_orig_cpu &&
|
||||
!task_demand_fits(p, start_cpu))
|
||||
start_cpu = rd->max_cap_orig_cpu;
|
||||
|
||||
return start_cpu;
|
||||
}
|
||||
|
||||
@ -7132,6 +7128,7 @@ static void find_best_target(struct sched_domain *sd, cpumask_t *cpus,
|
||||
struct sched_group *sg;
|
||||
int best_active_cpu = -1;
|
||||
int best_idle_cpu = -1;
|
||||
bool idle_fit_cpu_found = false;
|
||||
int best_prioritized_cpu = -1;
|
||||
int target_cpu = -1;
|
||||
int backup_cpu = -1;
|
||||
@ -7258,11 +7255,19 @@ static void find_best_target(struct sched_domain *sd, cpumask_t *cpus,
|
||||
prioritized_task && !is_min_capacity_cpu(i) &&
|
||||
per_cpu(prioritized_task_nr, i) == 0;
|
||||
|
||||
if ((!(prefer_idle && idle_cpu(i)) &&
|
||||
!best_prioritized_candidate &&
|
||||
new_util > capacity_orig) ||
|
||||
(is_min_capacity_cpu(i) &&
|
||||
!task_fits_capacity(p, capacity_orig, i)))
|
||||
if (!(prefer_idle && idle_cpu(i)) &&
|
||||
!best_prioritized_candidate &&
|
||||
new_util > capacity_orig)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If start cpu is mid core, we don't want to loop
|
||||
* back to little cores, unless the task prefers
|
||||
* idle cpu and could not find one in mid/max core.
|
||||
*/
|
||||
if (!(prefer_idle && idle_fit_cpu_found == false) &&
|
||||
is_min_capacity_cpu(i) &&
|
||||
!task_fits_capacity(p, capacity_orig, i))
|
||||
continue;
|
||||
|
||||
/*
|
||||
@ -7350,6 +7355,11 @@ static void find_best_target(struct sched_domain *sd, cpumask_t *cpus,
|
||||
target_capacity = capacity_orig;
|
||||
shallowest_idle_cstate = idle_idx;
|
||||
best_idle_util = new_util;
|
||||
|
||||
if (is_min_capacity_cpu(start_cpu) ==
|
||||
is_min_capacity_cpu(i))
|
||||
idle_fit_cpu_found = true;
|
||||
|
||||
best_idle_cpu = i;
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user