linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sched/cpufreq: Align trace event behavior of fast switching
@ 2019-08-07 15:33 Douglas RAILLARD
  2019-08-07 20:40 ` Rafael J. Wysocki
  2019-08-26  9:10 ` Rafael J. Wysocki
  0 siblings, 2 replies; 9+ messages in thread
From: Douglas RAILLARD @ 2019-08-07 15:33 UTC (permalink / raw)
  To: linux-kernel, linux-pm; +Cc: rjw, viresh.kumar, mingo, peterz

Fast switching path only emits an event for the CPU of interest, whereas the
regular path emits an event for all the CPUs that had their frequency changed,
i.e. all the CPUs sharing the same policy.

With the current behavior, looking at cpu_frequency event for a given CPU that
is using the fast switching path will not give the correct frequency signal.

Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com>
---
 kernel/sched/cpufreq_schedutil.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 1f82ab108bab..975ccc3de807 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -153,6 +153,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
 			      unsigned int next_freq)
 {
 	struct cpufreq_policy *policy = sg_policy->policy;
+	int cpu;
 
 	if (!sugov_update_next_freq(sg_policy, time, next_freq))
 		return;
@@ -162,7 +163,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
 		return;
 
 	policy->cur = next_freq;
-	trace_cpu_frequency(next_freq, smp_processor_id());
+
+	if (trace_cpu_frequency_enabled()) {
+		for_each_cpu(cpu, policy->cpus)
+			trace_cpu_frequency(next_freq, cpu);
+	}
 }
 
 static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time,
-- 
2.22.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-07 15:33 [PATCH] sched/cpufreq: Align trace event behavior of fast switching Douglas RAILLARD
@ 2019-08-07 20:40 ` Rafael J. Wysocki
  2019-08-08 16:18   ` Douglas Raillard
  2019-08-26  9:10 ` Rafael J. Wysocki
  1 sibling, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2019-08-07 20:40 UTC (permalink / raw)
  To: Douglas RAILLARD
  Cc: Linux Kernel Mailing List, Linux PM, Rafael J. Wysocki,
	Viresh Kumar, Ingo Molnar, Peter Zijlstra

On Wed, Aug 7, 2019 at 5:34 PM Douglas RAILLARD
<douglas.raillard@arm.com> wrote:
>
> Fast switching path only emits an event for the CPU of interest, whereas the
> regular path emits an event for all the CPUs that had their frequency changed,
> i.e. all the CPUs sharing the same policy.
>
> With the current behavior, looking at cpu_frequency event for a given CPU that
> is using the fast switching path will not give the correct frequency signal.

Do you actually have any systems where that is a problem?  If so, then
what are they?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-07 20:40 ` Rafael J. Wysocki
@ 2019-08-08 16:18   ` Douglas Raillard
  0 siblings, 0 replies; 9+ messages in thread
From: Douglas Raillard @ 2019-08-08 16:18 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux Kernel Mailing List, Linux PM, Rafael J. Wysocki,
	Viresh Kumar, Ingo Molnar, Peter Zijlstra

Hi Rafael,

On 8/7/19 9:40 PM, Rafael J. Wysocki wrote:
> On Wed, Aug 7, 2019 at 5:34 PM Douglas RAILLARD
> <douglas.raillard@arm.com> wrote:
>>
>> Fast switching path only emits an event for the CPU of interest, whereas the
>> regular path emits an event for all the CPUs that had their frequency changed,
>> i.e. all the CPUs sharing the same policy.
>>
>> With the current behavior, looking at cpu_frequency event for a given CPU that
>> is using the fast switching path will not give the correct frequency signal.
> 
> Do you actually have any systems where that is a problem?  If so, then
> what are they?
> 

That happens on Google Pixel 3 smartphone, which uses this cpufreq driver: drivers/cpufreq/qcom-cpufreq-hw.c.

[1] git clone https://git.linaro.org/people/amit.pundir/linux.git -b blueline-mainline-tracking

Thanks,
Douglas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-07 15:33 [PATCH] sched/cpufreq: Align trace event behavior of fast switching Douglas RAILLARD
  2019-08-07 20:40 ` Rafael J. Wysocki
@ 2019-08-26  9:10 ` Rafael J. Wysocki
  2019-08-26  9:40   ` Peter Zijlstra
  1 sibling, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2019-08-26  9:10 UTC (permalink / raw)
  To: Douglas RAILLARD, peterz; +Cc: linux-kernel, linux-pm, viresh.kumar, mingo

On Wednesday, August 7, 2019 5:33:40 PM CEST Douglas RAILLARD wrote:
> Fast switching path only emits an event for the CPU of interest, whereas the
> regular path emits an event for all the CPUs that had their frequency changed,
> i.e. all the CPUs sharing the same policy.
> 
> With the current behavior, looking at cpu_frequency event for a given CPU that
> is using the fast switching path will not give the correct frequency signal.
> 
> Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com>
> ---
>  kernel/sched/cpufreq_schedutil.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> index 1f82ab108bab..975ccc3de807 100644
> --- a/kernel/sched/cpufreq_schedutil.c
> +++ b/kernel/sched/cpufreq_schedutil.c
> @@ -153,6 +153,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
>  			      unsigned int next_freq)
>  {
>  	struct cpufreq_policy *policy = sg_policy->policy;
> +	int cpu;
>  
>  	if (!sugov_update_next_freq(sg_policy, time, next_freq))
>  		return;
> @@ -162,7 +163,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
>  		return;
>  
>  	policy->cur = next_freq;
> -	trace_cpu_frequency(next_freq, smp_processor_id());
> +
> +	if (trace_cpu_frequency_enabled()) {
> +		for_each_cpu(cpu, policy->cpus)
> +			trace_cpu_frequency(next_freq, cpu);
> +	}
>  }
>  
>  static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time,
> 

Peter, any comments here?




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-26  9:10 ` Rafael J. Wysocki
@ 2019-08-26  9:40   ` Peter Zijlstra
  2019-08-26  9:51     ` Dietmar Eggemann
  2019-08-28  9:44     ` Rafael J. Wysocki
  0 siblings, 2 replies; 9+ messages in thread
From: Peter Zijlstra @ 2019-08-26  9:40 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Douglas RAILLARD, linux-kernel, linux-pm, viresh.kumar, mingo

On Mon, Aug 26, 2019 at 11:10:52AM +0200, Rafael J. Wysocki wrote:
> On Wednesday, August 7, 2019 5:33:40 PM CEST Douglas RAILLARD wrote:
> > Fast switching path only emits an event for the CPU of interest, whereas the
> > regular path emits an event for all the CPUs that had their frequency changed,
> > i.e. all the CPUs sharing the same policy.
> > 
> > With the current behavior, looking at cpu_frequency event for a given CPU that
> > is using the fast switching path will not give the correct frequency signal.
> > 
> > Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com>
> > ---
> >  kernel/sched/cpufreq_schedutil.c | 7 ++++++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> > index 1f82ab108bab..975ccc3de807 100644
> > --- a/kernel/sched/cpufreq_schedutil.c
> > +++ b/kernel/sched/cpufreq_schedutil.c
> > @@ -153,6 +153,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
> >  			      unsigned int next_freq)
> >  {
> >  	struct cpufreq_policy *policy = sg_policy->policy;
> > +	int cpu;
> >  
> >  	if (!sugov_update_next_freq(sg_policy, time, next_freq))
> >  		return;
> > @@ -162,7 +163,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
> >  		return;
> >  
> >  	policy->cur = next_freq;
> > -	trace_cpu_frequency(next_freq, smp_processor_id());
> > +
> > +	if (trace_cpu_frequency_enabled()) {
> > +		for_each_cpu(cpu, policy->cpus)
> > +			trace_cpu_frequency(next_freq, cpu);
> > +	}
> >  }
> >  
> >  static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time,
> > 
> 
> Peter, any comments here?

I was thinking this would be a static map and dealing with it would be
something trivially done in post (or manually while reading), but sure,
whatever:

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-26  9:40   ` Peter Zijlstra
@ 2019-08-26  9:51     ` Dietmar Eggemann
  2019-08-26 11:24       ` Peter Zijlstra
  2019-08-28  9:44     ` Rafael J. Wysocki
  1 sibling, 1 reply; 9+ messages in thread
From: Dietmar Eggemann @ 2019-08-26  9:51 UTC (permalink / raw)
  To: Peter Zijlstra, Rafael J. Wysocki
  Cc: Douglas RAILLARD, linux-kernel, linux-pm, viresh.kumar, mingo

On 26/08/2019 11:40, Peter Zijlstra wrote:
> On Mon, Aug 26, 2019 at 11:10:52AM +0200, Rafael J. Wysocki wrote:
>> On Wednesday, August 7, 2019 5:33:40 PM CEST Douglas RAILLARD wrote:
>>> Fast switching path only emits an event for the CPU of interest, whereas the
>>> regular path emits an event for all the CPUs that had their frequency changed,
>>> i.e. all the CPUs sharing the same policy.
>>>
>>> With the current behavior, looking at cpu_frequency event for a given CPU that
>>> is using the fast switching path will not give the correct frequency signal.
>>>
>>> Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com>
>>> ---
>>>  kernel/sched/cpufreq_schedutil.c | 7 ++++++-
>>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
>>> index 1f82ab108bab..975ccc3de807 100644
>>> --- a/kernel/sched/cpufreq_schedutil.c
>>> +++ b/kernel/sched/cpufreq_schedutil.c
>>> @@ -153,6 +153,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
>>>  			      unsigned int next_freq)
>>>  {
>>>  	struct cpufreq_policy *policy = sg_policy->policy;
>>> +	int cpu;
>>>  
>>>  	if (!sugov_update_next_freq(sg_policy, time, next_freq))
>>>  		return;
>>> @@ -162,7 +163,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
>>>  		return;
>>>  
>>>  	policy->cur = next_freq;
>>> -	trace_cpu_frequency(next_freq, smp_processor_id());
>>> +
>>> +	if (trace_cpu_frequency_enabled()) {
>>> +		for_each_cpu(cpu, policy->cpus)
>>> +			trace_cpu_frequency(next_freq, cpu);
>>> +	}
>>>  }
>>>  
>>>  static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time,
>>>
>>
>> Peter, any comments here?
> 
> I was thinking this would be a static map and dealing with it would be
> something trivially done in post (or manually while reading), but sure,
> whatever:
> 
> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>

I think our EAS tooling expects the behavior of the non-fast-switching
driver (cpufreq.c cpufreq_notify_transition() CPUFREQ_POSTCHANGE). Pixel
3 is the first device with a fast-switching driver we test on.

Not sure about the extra  'if trace_cpu_frequency_enabled()' but I guess
it doesn't hurt.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-26  9:51     ` Dietmar Eggemann
@ 2019-08-26 11:24       ` Peter Zijlstra
  2019-08-26 12:12         ` Dietmar Eggemann
  0 siblings, 1 reply; 9+ messages in thread
From: Peter Zijlstra @ 2019-08-26 11:24 UTC (permalink / raw)
  To: Dietmar Eggemann
  Cc: Rafael J. Wysocki, Douglas RAILLARD, linux-kernel, linux-pm,
	viresh.kumar, mingo

On Mon, Aug 26, 2019 at 11:51:17AM +0200, Dietmar Eggemann wrote:

> Not sure about the extra  'if trace_cpu_frequency_enabled()' but I guess
> it doesn't hurt.

Without that you do that for_each_cpu() iteration unconditionally, even
if the tracepoint is disabled.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-26 11:24       ` Peter Zijlstra
@ 2019-08-26 12:12         ` Dietmar Eggemann
  0 siblings, 0 replies; 9+ messages in thread
From: Dietmar Eggemann @ 2019-08-26 12:12 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Rafael J. Wysocki, Douglas RAILLARD, linux-kernel, linux-pm,
	viresh.kumar, mingo

On 26/08/2019 13:24, Peter Zijlstra wrote:
> On Mon, Aug 26, 2019 at 11:51:17AM +0200, Dietmar Eggemann wrote:
> 
>> Not sure about the extra  'if trace_cpu_frequency_enabled()' but I guess
>> it doesn't hurt.
> 
> Without that you do that for_each_cpu() iteration unconditionally, even
> if the tracepoint is disabled.

Makes sense, I'm wondering if we want this in
cpufreq_notify_transition() CPUFREQ_POSTCHANGE for the
non-fast-switching drivers as well.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] sched/cpufreq: Align trace event behavior of fast switching
  2019-08-26  9:40   ` Peter Zijlstra
  2019-08-26  9:51     ` Dietmar Eggemann
@ 2019-08-28  9:44     ` Rafael J. Wysocki
  1 sibling, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2019-08-28  9:44 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Douglas RAILLARD, linux-kernel, linux-pm, viresh.kumar, mingo

On Monday, August 26, 2019 11:40:58 AM CEST Peter Zijlstra wrote:
> On Mon, Aug 26, 2019 at 11:10:52AM +0200, Rafael J. Wysocki wrote:
> > On Wednesday, August 7, 2019 5:33:40 PM CEST Douglas RAILLARD wrote:
> > > Fast switching path only emits an event for the CPU of interest, whereas the
> > > regular path emits an event for all the CPUs that had their frequency changed,
> > > i.e. all the CPUs sharing the same policy.
> > > 
> > > With the current behavior, looking at cpu_frequency event for a given CPU that
> > > is using the fast switching path will not give the correct frequency signal.
> > > 
> > > Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com>
> > > ---
> > >  kernel/sched/cpufreq_schedutil.c | 7 ++++++-
> > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> > > index 1f82ab108bab..975ccc3de807 100644
> > > --- a/kernel/sched/cpufreq_schedutil.c
> > > +++ b/kernel/sched/cpufreq_schedutil.c
> > > @@ -153,6 +153,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
> > >  			      unsigned int next_freq)
> > >  {
> > >  	struct cpufreq_policy *policy = sg_policy->policy;
> > > +	int cpu;
> > >  
> > >  	if (!sugov_update_next_freq(sg_policy, time, next_freq))
> > >  		return;
> > > @@ -162,7 +163,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time,
> > >  		return;
> > >  
> > >  	policy->cur = next_freq;
> > > -	trace_cpu_frequency(next_freq, smp_processor_id());
> > > +
> > > +	if (trace_cpu_frequency_enabled()) {
> > > +		for_each_cpu(cpu, policy->cpus)
> > > +			trace_cpu_frequency(next_freq, cpu);
> > > +	}
> > >  }
> > >  
> > >  static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time,
> > > 
> > 
> > Peter, any comments here?
> 
> I was thinking this would be a static map and dealing with it would be
> something trivially done in post (or manually while reading), but sure,
> whatever:
> 
> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> 

Thanks, queuing up this one for 5.4.





^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-08-28  9:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-07 15:33 [PATCH] sched/cpufreq: Align trace event behavior of fast switching Douglas RAILLARD
2019-08-07 20:40 ` Rafael J. Wysocki
2019-08-08 16:18   ` Douglas Raillard
2019-08-26  9:10 ` Rafael J. Wysocki
2019-08-26  9:40   ` Peter Zijlstra
2019-08-26  9:51     ` Dietmar Eggemann
2019-08-26 11:24       ` Peter Zijlstra
2019-08-26 12:12         ` Dietmar Eggemann
2019-08-28  9:44     ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).