sched: EAS: Avoid causing spikes to max-freq unnecessarily
authorTodd Kjos <tkjos@google.com>
Wed, 29 Jun 2016 18:30:07 +0000 (11:30 -0700)
committerAmit Pundir <amit.pundir@linaro.org>
Wed, 14 Sep 2016 09:32:22 +0000 (15:02 +0530)
During scheduler tick handling, the frequency was being set to
max-freq if the current frequency is less than the current
utilization. Change to just request "right" frequency instead
of max.

BUG: 29871410
Change-Id: I6fe65b14413da44b1520ba116f72320083eb92f8

kernel/sched/core.c

index 67abbbd3965ba7405ef9b72945f20ed29dd30b02..19decf8c07d5e083b583cc6651f710b1153fd2ce 100644 (file)
@@ -2940,7 +2940,7 @@ static unsigned long sum_capacity_reqs(unsigned long cfs_cap,
 static void sched_freq_tick(int cpu)
 {
        struct sched_capacity_reqs *scr;
-       unsigned long capacity_orig, capacity_curr;
+       unsigned long capacity_orig, capacity_curr, capacity_sum;
 
        if (!sched_freq())
                return;
@@ -2953,12 +2953,15 @@ static void sched_freq_tick(int cpu)
        /*
         * To make free room for a task that is building up its "real"
         * utilization and to harm its performance the least, request
-        * a jump to max OPP as soon as the margin of free capacity is
-        * impacted (specified by capacity_margin).
+        * a jump to a higher OPP as soon as the margin of free capacity
+        * is impacted (specified by capacity_margin).
         */
+
        scr = &per_cpu(cpu_sched_capacity_reqs, cpu);
-       if (capacity_curr < sum_capacity_reqs(cpu_util(cpu), scr))
-               set_cfs_cpu_capacity(cpu, true, capacity_max);
+       capacity_sum = sum_capacity_reqs(cpu_util(cpu), scr);
+       if (capacity_curr < capacity_sum) {
+               set_cfs_cpu_capacity(cpu, true, capacity_sum);
+       }
 }
 #else
 static inline void sched_freq_tick(int cpu) { }