Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0601320 authored by Quentin Perret's avatar Quentin Perret
Browse files

ANDROID: sched/fair: Bypass energy computation for prefer_idle tasks



If the only pre-selected candidate CPU in find_energy_efficient_cpu()
happens to be prev_cpu, there is not point in computing the system
energy since we have nothing to compare it against, so we currently bail
out early. The same logic can be extended when prefer_idle tasks are
routed in the energy-aware wake-up path: if the only candidate is idle
for a prefer_idle task, just select it no matter what the energy impact
is. That should help speeding-up wake-ups of prefer_idle tasks, at least
when find_best_target() is used for them.

Signed-off-by: default avatarQuentin Perret <quentin.perret@arm.com>
Change-Id: Idd0e387e4a766061cc05d2584df3a31e4dabfd09
parent 1d00c33d
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -6997,11 +6997,19 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu, int sy
	else
		select_max_spare_cap_cpus(sd, candidates, pd, p);

	/* Bail out if there is no candidate, or if the only one is prev_cpu */
	/* Bail out if no candidate was found. */
	weight = cpumask_weight(candidates);
	if (!weight || (weight == 1 && cpumask_first(candidates) == prev_cpu))
	if (!weight)
		goto unlock;

	/* If there is only one sensible candidate, select it now. */
	cpu = cpumask_first(candidates);
	if (weight == 1 && ((schedtune_prefer_idle(p) && idle_cpu(cpu)) ||
			    (cpu == prev_cpu))) {
		best_energy_cpu = cpu;
		goto unlock;
	}

	if (cpumask_test_cpu(prev_cpu, &p->cpus_allowed))
		prev_energy = best_energy = compute_energy(p, prev_cpu, pd);
	else