linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU
@ 2017-12-19 17:47 Joel Fernandes
  2017-12-19 18:48 ` Peter Zijlstra
  0 siblings, 1 reply; 5+ messages in thread
From: Joel Fernandes @ 2017-12-19 17:47 UTC (permalink / raw)
  To: linux-kernel
  Cc: Joel Fernandes, Srinivas Pandruvada, Len Brown,
	Rafael J. Wysocki, Viresh Kumar, Ingo Molnar, Peter Zijlstra,
	Juri Lelli, Patrick Bellasi, Chris Redpath, Steve Muckle,
	Dietmar Eggemann, Vincent Guittot, Morten Ramussen,
	Frederic Weisbecker, Thomas Gleixner, Saravana Kannan,
	Vikram Mulukutla, Rohit Jain, Atish Patra, Josef Bacik,
	Rik van Riel, EAS Dev

Since the recent remote cpufreq callback work, its possible that a cpufreq
update is triggered from a remote CPU. For single policies however, the current
code uses the local CPU when trying to determine if the remote sg_cpu entered
idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
idle_calls counter of the remote CPU.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Joel Fernandes <joelaf@google.com>
---
Just resending this which is cpufreq-related as requested by Rafael rebased
on linus/master.

The other 2 patches in my last series which can go in independent of this one are:
https://patchwork.kernel.org/patch/10115395/
https://patchwork.kernel.org/patch/10115401/
I'm still waiting on scheduler maintainers to comment on those. Unfortunately,
I haven't heard back anything yet since the last repost of those.

 include/linux/tick.h             |  1 +
 kernel/sched/cpufreq_schedutil.c |  2 +-
 kernel/time/tick-sched.c         | 13 +++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/linux/tick.h b/include/linux/tick.h
index f442d1a42025..7cc35921218e 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -119,6 +119,7 @@ extern void tick_nohz_idle_exit(void);
 extern void tick_nohz_irq_exit(void);
 extern ktime_t tick_nohz_get_sleep_length(void);
 extern unsigned long tick_nohz_get_idle_calls(void);
+extern unsigned long tick_nohz_get_idle_calls_cpu(int cpu);
 extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
 extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
 #else /* !CONFIG_NO_HZ_COMMON */
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 2f52ec0f1539..d6717a3331a1 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -244,7 +244,7 @@ static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, unsigned long *util,
 #ifdef CONFIG_NO_HZ_COMMON
 static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
 {
-	unsigned long idle_calls = tick_nohz_get_idle_calls();
+	unsigned long idle_calls = tick_nohz_get_idle_calls_cpu(sg_cpu->cpu);
 	bool ret = idle_calls == sg_cpu->saved_idle_calls;
 
 	sg_cpu->saved_idle_calls = idle_calls;
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 99578f06c8d4..77555faf6fbc 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -985,6 +985,19 @@ ktime_t tick_nohz_get_sleep_length(void)
 	return ts->sleep_length;
 }
 
+/**
+ * tick_nohz_get_idle_calls_cpu - return the current idle calls counter value
+ * for a particular CPU.
+ *
+ * Called from the schedutil frequency scaling governor in scheduler context.
+ */
+unsigned long tick_nohz_get_idle_calls_cpu(int cpu)
+{
+	struct tick_sched *ts = tick_get_tick_sched(cpu);
+
+	return ts->idle_calls;
+}
+
 /**
  * tick_nohz_get_idle_calls - return the current idle calls counter value
  *
-- 
2.15.1.504.g5279b80103-goog

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

* Re: [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU
  2017-12-19 17:47 [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU Joel Fernandes
@ 2017-12-19 18:48 ` Peter Zijlstra
  2017-12-19 19:32   ` Joel Fernandes
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Zijlstra @ 2017-12-19 18:48 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: linux-kernel, Srinivas Pandruvada, Len Brown, Rafael J. Wysocki,
	Viresh Kumar, Ingo Molnar, Juri Lelli, Patrick Bellasi,
	Chris Redpath, Steve Muckle, Dietmar Eggemann, Vincent Guittot,
	Morten Ramussen, Frederic Weisbecker, Thomas Gleixner,
	Saravana Kannan, Vikram Mulukutla, Rohit Jain, Atish Patra,
	Josef Bacik, Rik van Riel, EAS Dev

On Tue, Dec 19, 2017 at 09:47:12AM -0800, Joel Fernandes wrote:
> Since the recent remote cpufreq callback work, its possible that a cpufreq
> update is triggered from a remote CPU. For single policies however, the current
> code uses the local CPU when trying to determine if the remote sg_cpu entered
> idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
> idle_calls counter of the remote CPU.
> 
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
> Signed-off-by: Joel Fernandes <joelaf@google.com>

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

> ---
> Just resending this which is cpufreq-related as requested by Rafael rebased
> on linus/master.
> 
> The other 2 patches in my last series which can go in independent of this one are:
> https://patchwork.kernel.org/patch/10115395/
> https://patchwork.kernel.org/patch/10115401/
> I'm still waiting on scheduler maintainers to comment on those. Unfortunately,
> I haven't heard back anything yet since the last repost of those.

Both of us have been somewhat preoccupied with that whole kaiser/pti
thing the past few weeks.

I have an absolutely stupid backlog :/

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

* Re: [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU
  2017-12-19 18:48 ` Peter Zijlstra
@ 2017-12-19 19:32   ` Joel Fernandes
  2017-12-20 14:45     ` Rafael J. Wysocki
  0 siblings, 1 reply; 5+ messages in thread
From: Joel Fernandes @ 2017-12-19 19:32 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: LKML, Srinivas Pandruvada, Len Brown, Rafael J. Wysocki,
	Viresh Kumar, Ingo Molnar, Juri Lelli, Patrick Bellasi,
	Chris Redpath, Steve Muckle, Dietmar Eggemann, Vincent Guittot,
	Morten Ramussen, Frederic Weisbecker, Thomas Gleixner,
	Saravana Kannan, Vikram Mulukutla, Rohit Jain, Atish Patra,
	Josef Bacik, Rik van Riel, EAS Dev

On Tue, Dec 19, 2017 at 10:48 AM, Peter Zijlstra <peterz@infradead.org> wrote:
> On Tue, Dec 19, 2017 at 09:47:12AM -0800, Joel Fernandes wrote:
>> Since the recent remote cpufreq callback work, its possible that a cpufreq
>> update is triggered from a remote CPU. For single policies however, the current
>> code uses the local CPU when trying to determine if the remote sg_cpu entered
>> idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
>> idle_calls counter of the remote CPU.
>>
>> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
>> Signed-off-by: Joel Fernandes <joelaf@google.com>
>
> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>

Sweet!

>
>> ---
>> Just resending this which is cpufreq-related as requested by Rafael rebased
>> on linus/master.
>>
>> The other 2 patches in my last series which can go in independent of this one are:
>> https://patchwork.kernel.org/patch/10115395/
>> https://patchwork.kernel.org/patch/10115401/
>> I'm still waiting on scheduler maintainers to comment on those. Unfortunately,
>> I haven't heard back anything yet since the last repost of those.
>
> Both of us have been somewhat preoccupied with that whole kaiser/pti
> thing the past few weeks.

I understand, thanks for taking time to look at it! Hopefully you're
Ok with the second one as well
(https://patchwork.kernel.org/patch/10115401). And this cap aware
one's been pretty beaten to death too:
https://patchwork.kernel.org/patch/10113337/ but let me know your
objections if any.

>
> I have an absolutely stupid backlog :/

I see. :/
I am thinking of spending more time reviewing fwiw and hopefully
helping relieve some of that burden. Happy to help in any other way as
well so let me/us know how we can help.

thanks,

- Joel

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

* Re: [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU
  2017-12-19 19:32   ` Joel Fernandes
@ 2017-12-20 14:45     ` Rafael J. Wysocki
  2017-12-20 17:44       ` Joel Fernandes
  0 siblings, 1 reply; 5+ messages in thread
From: Rafael J. Wysocki @ 2017-12-20 14:45 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Peter Zijlstra, LKML, Srinivas Pandruvada, Len Brown,
	Viresh Kumar, Ingo Molnar, Juri Lelli, Patrick Bellasi,
	Chris Redpath, Steve Muckle, Dietmar Eggemann, Vincent Guittot,
	Morten Ramussen, Frederic Weisbecker, Thomas Gleixner,
	Saravana Kannan, Vikram Mulukutla, Rohit Jain, Atish Patra,
	Josef Bacik, Rik van Riel, EAS Dev

On Tuesday, December 19, 2017 8:32:09 PM CET Joel Fernandes wrote:
> On Tue, Dec 19, 2017 at 10:48 AM, Peter Zijlstra <peterz@infradead.org> wrote:
> > On Tue, Dec 19, 2017 at 09:47:12AM -0800, Joel Fernandes wrote:
> >> Since the recent remote cpufreq callback work, its possible that a cpufreq
> >> update is triggered from a remote CPU. For single policies however, the current
> >> code uses the local CPU when trying to determine if the remote sg_cpu entered
> >> idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
> >> idle_calls counter of the remote CPU.
> >>
> >> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
> >> Signed-off-by: Joel Fernandes <joelaf@google.com>
> >
> > Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> 
> Sweet!

OK, so any chance to get a Fixes: tag for the patch?

Thanks,
Rafael

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

* Re: [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU
  2017-12-20 14:45     ` Rafael J. Wysocki
@ 2017-12-20 17:44       ` Joel Fernandes
  0 siblings, 0 replies; 5+ messages in thread
From: Joel Fernandes @ 2017-12-20 17:44 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Peter Zijlstra, LKML, Srinivas Pandruvada, Len Brown,
	Viresh Kumar, Ingo Molnar, Juri Lelli, Patrick Bellasi,
	Chris Redpath, Steve Muckle, Dietmar Eggemann, Vincent Guittot,
	Morten Ramussen, Frederic Weisbecker, Thomas Gleixner,
	Saravana Kannan, Vikram Mulukutla, Rohit Jain, Atish Patra,
	Josef Bacik, Rik van Riel, EAS Dev, linux-pm

Hi Rafael,

On 12/20/2017 06:45 AM, Rafael J. Wysocki wrote:
> On Tuesday, December 19, 2017 8:32:09 PM CET Joel Fernandes wrote:
>> On Tue, Dec 19, 2017 at 10:48 AM, Peter Zijlstra <peterz@infradead.org> wrote:
>>> On Tue, Dec 19, 2017 at 09:47:12AM -0800, Joel Fernandes wrote:
>>>> Since the recent remote cpufreq callback work, its possible that a cpufreq
>>>> update is triggered from a remote CPU. For single policies however, the current
>>>> code uses the local CPU when trying to determine if the remote sg_cpu entered
>>>> idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
>>>> idle_calls counter of the remote CPU.
>>>>
>>>> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
>>>> Signed-off-by: Joel Fernandes <joelaf@google.com>
>>>
>>> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>>
>> Sweet!
> 
> OK, so any chance to get a Fixes: tag for the patch?

Sure. Please find an inline patch below with all acks and fixes tag. thanks!

---8<---
From: Joel Fernandes <joelaf@google.com>
Subject: [PATCH] cpufreq: schedutil: Use idle_calls counter of the remote CPU

Since the recent remote cpufreq callback work, its possible that a cpufreq
update is triggered from a remote CPU. For single policies however, the current
code uses the local CPU when trying to determine if the remote sg_cpu entered
idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
idle_calls counter of the remote CPU.

Fixes: 674e75411fc2 ("sched: cpufreq: Allow remote cpufreq callbacks")
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Joel Fernandes <joelaf@google.com>
---
 include/linux/tick.h             |  1 +
 kernel/sched/cpufreq_schedutil.c |  2 +-
 kernel/time/tick-sched.c         | 13 +++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/linux/tick.h b/include/linux/tick.h
index f442d1a42025..7cc35921218e 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -119,6 +119,7 @@ extern void tick_nohz_idle_exit(void);
 extern void tick_nohz_irq_exit(void);
 extern ktime_t tick_nohz_get_sleep_length(void);
 extern unsigned long tick_nohz_get_idle_calls(void);
+extern unsigned long tick_nohz_get_idle_calls_cpu(int cpu);
 extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
 extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
 #else /* !CONFIG_NO_HZ_COMMON */
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 2f52ec0f1539..d6717a3331a1 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -244,7 +244,7 @@ static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, unsigned long *util,
 #ifdef CONFIG_NO_HZ_COMMON
 static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
 {
-	unsigned long idle_calls = tick_nohz_get_idle_calls();
+	unsigned long idle_calls = tick_nohz_get_idle_calls_cpu(sg_cpu->cpu);
 	bool ret = idle_calls == sg_cpu->saved_idle_calls;
 
 	sg_cpu->saved_idle_calls = idle_calls;
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 99578f06c8d4..77555faf6fbc 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -985,6 +985,19 @@ ktime_t tick_nohz_get_sleep_length(void)
 	return ts->sleep_length;
 }
 
+/**
+ * tick_nohz_get_idle_calls_cpu - return the current idle calls counter value
+ * for a particular CPU.
+ *
+ * Called from the schedutil frequency scaling governor in scheduler context.
+ */
+unsigned long tick_nohz_get_idle_calls_cpu(int cpu)
+{
+	struct tick_sched *ts = tick_get_tick_sched(cpu);
+
+	return ts->idle_calls;
+}
+
 /**
  * tick_nohz_get_idle_calls - return the current idle calls counter value
  *

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

end of thread, other threads:[~2017-12-20 17:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-19 17:47 [PATCH RESEND] cpufreq: schedutil: Use idle_calls counter of the remote CPU Joel Fernandes
2017-12-19 18:48 ` Peter Zijlstra
2017-12-19 19:32   ` Joel Fernandes
2017-12-20 14:45     ` Rafael J. Wysocki
2017-12-20 17:44       ` Joel Fernandes

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).