Re: [PATCH v3 6/6] cpufreq: schedutil: ignore sugov kthreads
From: Patrick Bellasi <hidden>
Date: 2017-11-30 16:02:40
Also in:
lkml
On 30-Nov 14:41, Juri Lelli wrote:
Hi, On 30/11/17 11:47, Patrick Bellasi wrote:quoted
In system where multiple CPUs shares the same frequency domain a small workload on a CPU can still be subject to frequency spikes, generated by the activation of the sugov's kthread. Since the sugov kthread is a special RT task, which goal is just that to activate a frequency transition, it does not make sense for it to bias the schedutil's frequency selection policy. This patch exploits the information related to the current task to silently ignore cpufreq_update_this_cpu() calls, coming from the RT scheduler, while the sugov kthread is running. Signed-off-by: Patrick Bellasi <redacted> Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rafael J. Wysocki <redacted> Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: linux-kernel@vger.kernel.org Cc: linux-pm@vger.kernel.org --- Changes from v2: - rebased on v4.15-rc1 - moved at the end of the stack since considered more controversial Changes from v1: - move check before policy spinlock (JuriL) Change-Id: I4d749458229b6496dd24a8c357be42cd35a739fd --- kernel/sched/cpufreq_schedutil.c | 8 ++++++++ 1 file changed, 8 insertions(+)diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 3eea8884e61b..a93ad5b0c40d 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c@@ -270,6 +270,10 @@ static void sugov_update_single(struct update_util_data *hook, u64 time, bool rt_mode; bool busy; + /* Skip updates generated by sugov kthreads */ + if (unlikely(current == sg_policy->thread)) + return; + sugov_set_iowait_boost(sg_cpu, time, flags); sg_cpu->last_update = time;@@ -356,6 +360,10 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time, unsigned int next_f; bool rt_mode; + /* Skip updates generated by sugov kthreads */ + if (unlikely(current == sg_policy->thread)) + return; + raw_spin_lock(&sg_policy->update_lock); sugov_get_util(&util, &max, sg_cpu->cpu);If the DL changes (which I shall post again as soon as tip/sched/core is bumped up to 4.15-rc1) get in first, this is going to be useless (as the DL kthread gets ignored by the scheduling class itself). But, this looks good to me "in the meantime".
Just to better understand, you mean that the DL kthread does not send out schedutil updates? If that's the case I agree we can discard this patch... that's also one of the reasons why I move it at the end of this series.
Reviewed-by: Juri Lelli <juri.lelli@redhat.com> Best, Juri
-- #include <best/regards.h> Patrick Bellasi