cpufreq: schedutil: Reduce frequencies slower
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 30 Mar 2017 21:36:41 +0000 (23:36 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 13 Apr 2017 01:46:40 +0000 (03:46 +0200)
The schedutil governor reduces frequencies too fast in some
situations which cases undesirable performance drops to
appear.

To address that issue, make schedutil reduce the frequency slower by
setting it to the average of the value chosen during the previous
iteration of governor computations and the new one coming from its
frequency selection formula.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=194963
Reported-by: John <john.ettedgui@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
kernel/sched/cpufreq_schedutil.c

index 848cb47094cda3bcbb05e7b72b9fc0e36dbb25ac..b1fedf9932d69fe5c86447663489924432e693b2 100644 (file)
@@ -101,6 +101,9 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time,
        if (sg_policy->next_freq == next_freq)
                return;
 
+       if (sg_policy->next_freq > next_freq)
+               next_freq = (sg_policy->next_freq + next_freq) >> 1;
+
        sg_policy->next_freq = next_freq;
        sg_policy->last_freq_update_time = time;