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.
Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com>
Change-Id: I89c0043fcc414f5e57eb6264b76b6137cc43c886
Signed-off-by: Chris Redpath <chris.redpath@arm.com>
struct sched_domain *sd;
struct sched_group *sg;
int sd_cpu = -1, energy_before = 0, energy_after = 0;
+ int diff, margin;
struct energy_env eenv_before = {
.util_delta = 0,
}
} while (sg = sg->next, sg != sd->groups);
- return energy_after-energy_before;
+ /*
+ * Dead-zone margin preventing too many migrations.
+ */
+
+ margin = energy_before >> 6; /* ~1.56% */
+
+ diff = energy_after-energy_before;
+
+ if (abs(diff) < margin)
+ return 0;
+
+ return diff;
}
/*