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

Commit 53838923 authored by Morten Rasmussen's avatar Morten Rasmussen Committed by Andres Oportus
Browse files

ANDROID: sched/fair: Add energy_diff dead-zone margin



It is not worth the overhead to migrate tasks for tiny insignificant
energy savings. To prevent this, an energy margin is introduced in
energy_diff() which effectively adds a dead-zone that rounds tiny energy
differences to zero. Since no scale is enforced for energy model data
the margin can't be absolute. Instead it is defined as +/-1.56% energy
saving compared to the current total estimated energy consumption.

Change-Id: I6be069c752c701fb825430896b3b768a7ab2fee4
Signed-off-by: default avatarMorten Rasmussen <morten.rasmussen@arm.com>
[rebase: on top of msm-google/android-msm-marlin-3.18,
         massage original patch which changes code in energy_diff()
	 into __energy_diff() introduced by SchedTune]
Signed-off-by: default avatarDietmar Eggemann <dietmar.eggemann@arm.com>
Signed-off-by: default avatarChris Redpath <chris.redpath@arm.com>
(cherry picked from commit 780cb5a5fa47adf13d4fc2b77e8e94448cd56098)
Signed-off-by: default avatarChris Redpath <chris.redpath@arm.com>
Signed-off-by: default avatarQuentin Perret <quentin.perret@arm.com>
parent bb2a4442
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -5476,6 +5476,7 @@ static inline int __energy_diff(struct energy_env *eenv)
	struct sched_domain *sd;
	struct sched_domain *sd;
	struct sched_group *sg;
	struct sched_group *sg;
	int sd_cpu = -1, energy_before = 0, energy_after = 0;
	int sd_cpu = -1, energy_before = 0, energy_after = 0;
	int diff, margin;


	struct energy_env eenv_before = {
	struct energy_env eenv_before = {
		.util_delta	= 0,
		.util_delta	= 0,
@@ -5525,6 +5526,16 @@ static inline int __energy_diff(struct energy_env *eenv)
			eenv->cap.before, eenv->cap.after, eenv->cap.delta,
			eenv->cap.before, eenv->cap.after, eenv->cap.delta,
			eenv->nrg.delta, eenv->payoff);
			eenv->nrg.delta, eenv->payoff);


	/*
	 * Dead-zone margin preventing too many migrations.
	 */

	margin = eenv->nrg.before >> 6; /* ~1.56% */

	diff = eenv->nrg.after - eenv->nrg.before;

	eenv->nrg.diff = (abs(diff) < margin) ? 0 : eenv->nrg.diff;

	return eenv->nrg.diff;
	return eenv->nrg.diff;
}
}