From: Frederic Weisbecker <frederic@kernel.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Peter Zijlstra <peterz@infradead.org>,
Linux PM <linux-pm@vger.kernel.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Paul McKenney <paulmck@linux.vnet.ibm.com>,
Thomas Ilsche <thomas.ilsche@tu-dresden.de>,
Doug Smythies <dsmythies@telus.net>,
Rik van Riel <riel@surriel.com>,
Aubrey Li <aubrey.li@linux.intel.com>,
Mike Galbraith <mgalbraith@suse.de>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [RFT][PATCH v4 1/7] time: tick-sched: Reorganize idle tick management code
Date: Wed, 14 Mar 2018 16:49:39 +0100 [thread overview]
Message-ID: <20180314154934.GA3635@lerouge> (raw)
In-Reply-To: <2019498.YXfJVQUTuX@aspire.rjw.lan>
On Mon, Mar 12, 2018 at 10:47:41AM +0100, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> Prepare the scheduler tick code for reworking the idle loop to
> avoid stopping the tick in some cases.
>
> Move away the tick_nohz_start_idle() invocation from
> __tick_nohz_idle_enter(), rename the latter to
> __tick_nohz_idle_stop_tick() and define tick_nohz_idle_stop_tick()
> as a wrapper around it for calling it from the outside.
>
> Make tick_nohz_idle_enter() only call tick_nohz_start_idle() instead
> of calling the entire __tick_nohz_idle_enter(), add another wrapper
> disabling and enabling interrupts around tick_nohz_idle_stop_tick()
> and make the current callers of tick_nohz_idle_enter() call it too
> to retain their current functionality.
Perhaps we should have a higher level description of what the patch does.
After all the low level part is already described in the diff.
Ie: we are splitting the nohz idle entry call to decouple the idle time
stats accounting and preparatory work from the actual tick stop code, that
in order to later be able to delay the tick stop once we reach more
power-knowledgeable callers.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> arch/x86/xen/smp_pv.c | 1 +
> include/linux/tick.h | 9 +++++++++
> kernel/sched/idle.c | 1 +
> kernel/time/tick-sched.c | 46 +++++++++++++++++++++++++---------------------
> 4 files changed, 36 insertions(+), 21 deletions(-)
>
> Index: linux-pm/include/linux/tick.h
> ===================================================================
> --- linux-pm.orig/include/linux/tick.h
> +++ linux-pm/include/linux/tick.h
> @@ -114,6 +114,7 @@ enum tick_dep_bits {
> #ifdef CONFIG_NO_HZ_COMMON
> extern bool tick_nohz_enabled;
> extern int tick_nohz_tick_stopped(void);
> +extern void tick_nohz_idle_stop_tick(void);
> extern void tick_nohz_idle_enter(void);
> extern void tick_nohz_idle_exit(void);
> extern void tick_nohz_irq_exit(void);
> @@ -125,6 +126,7 @@ extern u64 get_cpu_iowait_time_us(int cp
> #else /* !CONFIG_NO_HZ_COMMON */
> #define tick_nohz_enabled (0)
> static inline int tick_nohz_tick_stopped(void) { return 0; }
> +static inline void tick_nohz_idle_stop_tick(void) { }
> static inline void tick_nohz_idle_enter(void) { }
> static inline void tick_nohz_idle_exit(void) { }
>
> @@ -136,6 +138,13 @@ static inline u64 get_cpu_idle_time_us(i
> static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; }
> #endif /* !CONFIG_NO_HZ_COMMON */
>
> +static inline void tick_nohz_idle_stop_tick_protected(void)
> +{
> + local_irq_disable();
> + tick_nohz_idle_stop_tick();
> + local_irq_enable();
> +}
It seems that even if we have CONFIG_NO_HZ_COMMON=n, tick_nohz_idle_stop_tick_protected()
will have overhead, right?
Thanks.
next prev parent reply other threads:[~2018-03-14 15:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-12 9:46 [RFT][PATCH v4 0/7] sched/cpuidle: Idle loop rework Rafael J. Wysocki
2018-03-12 9:47 ` [RFT][PATCH v4 1/7] time: tick-sched: Reorganize idle tick management code Rafael J. Wysocki
2018-03-14 15:49 ` Frederic Weisbecker [this message]
2018-03-14 17:20 ` Peter Zijlstra
2018-03-15 17:26 ` Frederic Weisbecker
2018-03-15 12:33 ` Rafael J. Wysocki
2018-03-12 9:51 ` [RFT][PATCH v4 2/7] sched: idle: Do not stop the tick upfront in the idle loop Rafael J. Wysocki
2018-03-15 16:10 ` Frederic Weisbecker
2018-03-15 16:50 ` Rafael J. Wysocki
2018-03-12 9:53 ` [RFT][PATCH v4 3/7] sched: idle: Do not stop the tick before cpuidle_idle_call() Rafael J. Wysocki
2018-03-15 18:19 ` Frederic Weisbecker
2018-03-15 20:41 ` Rafael J. Wysocki
2018-03-15 21:12 ` Rafael J. Wysocki
2018-03-16 14:17 ` Frederic Weisbecker
2018-03-16 14:16 ` Frederic Weisbecker
2018-03-12 9:54 ` [RFT][PATCH v4 4/7] cpuidle: Return nohz hint from cpuidle_select() Rafael J. Wysocki
2018-03-14 12:59 ` Peter Zijlstra
2018-03-15 12:54 ` Rafael J. Wysocki
2018-03-12 10:04 ` [RFT][PATCH v4 5/7] sched: idle: Select idle state before stopping the tick Rafael J. Wysocki
2018-03-12 10:05 ` [RFT][PATCH v4 6/7] cpuidle: menu: Refine idle state selection for running tick Rafael J. Wysocki
2018-03-12 10:07 ` [RFT][PATCH v4 7/7] cpuidle: menu: Avoid selecting shallow states with stopped tick Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180314154934.GA3635@lerouge \
--to=frederic@kernel.org \
--cc=aubrey.li@linux.intel.com \
--cc=dsmythies@telus.net \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mgalbraith@suse.de \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=thomas.ilsche@tu-dresden.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox