OSDN Git Service

ANDROID: sched/fair: Add energy_diff dead-zone margin
authorMorten Rasmussen <morten.rasmussen@arm.com>
Wed, 30 Mar 2016 13:20:12 +0000 (14:20 +0100)
committerChris Redpath <chris.redpath@arm.com>
Tue, 19 Dec 2017 13:25:41 +0000 (13:25 +0000)
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>
kernel/sched/fair.c

index 94a117c..f158d05 100644 (file)
@@ -5594,6 +5594,7 @@ static int energy_diff(struct energy_env *eenv)
        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,
@@ -5626,7 +5627,18 @@ static int energy_diff(struct energy_env *eenv)
                }
        } 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;
 }
 
 /*