From: Frederic Weisbecker <frederic@kernel.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Linux PM <linux-pm@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.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>,
Len Brown <len.brown@intel.com>
Subject: Re: [PATCH v9 08/10] sched: idle: Select idle state before stopping the tick
Date: Mon, 9 Apr 2018 04:41:51 +0200 [thread overview]
Message-ID: <20180409024150.GB21904@lerouge> (raw)
In-Reply-To: <13248276.RivpnYp3Yv@aspire.rjw.lan>
On Wed, Apr 04, 2018 at 10:47:06AM +0200, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> In order to address the issue with short idle duration predictions
> by the idle governor after the scheduler tick has been stopped,
> reorder the code in cpuidle_idle_call() so that the governor idle
> state selection runs before tick_nohz_idle_go_idle() and use the
> "nohz" hint returned by cpuidle_select() to decide whether or not
> to stop the tick.
>
> This isn't straightforward, because menu_select() invokes
> tick_nohz_get_sleep_length() to get the time to the next timer
> event and the number returned by the latter comes from
> __tick_nohz_idle_stop_tick(). Fortunately, however, it is possible
> to compute that number without actually stopping the tick and with
> the help of the existing code.
>
> Namely, tick_nohz_get_sleep_length() can be made call
> tick_nohz_next_event(), introduced earlier, to get the time to the
> next non-highres timer event. If that happens, tick_nohz_next_event()
> need not be called by __tick_nohz_idle_stop_tick() again.
>
> If it turns out that the scheduler tick cannot be stopped going
> forward or the next timer event is too close for the tick to be
> stopped, tick_nohz_get_sleep_length() can simply return the time to
> the next event currently programmed into the corresponding clock
> event device.
>
> In addition to knowing the return value of tick_nohz_next_event(),
> however, tick_nohz_get_sleep_length() needs to know the time to the
> next highres timer event, but with the scheduler tick timer excluded,
> which can be computed with the help of hrtimer_get_next_event().
>
> That minimum of that number and the tick_nohz_next_event() return
> value is the total time to the next timer event with the assumption
> that the tick will be stopped. It can be returned to the idle
> governor which can use it for predicting idle duration (under the
> assumption that the tick will be stopped) and deciding whether or
> not it makes sense to stop the tick before putting the CPU into the
> selected idle state.
>
> With the above, the sleep_length field in struct tick_sched is not
> necessary any more, so drop it.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
next prev parent reply other threads:[~2018-04-09 2:41 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-04 8:32 [PATCH v9 00/10] sched/cpuidle: Idle loop rework Rafael J. Wysocki
2018-04-04 8:33 ` [PATCH v9 01/10] time: tick-sched: Reorganize idle tick management code Rafael J. Wysocki
2018-04-04 8:34 ` [PATCH v9 02/10] sched: idle: Do not stop the tick upfront in the idle loop Rafael J. Wysocki
2018-04-04 8:36 ` [PATCH v9 03/10] sched: idle: Do not stop the tick before cpuidle_idle_call() Rafael J. Wysocki
2018-04-04 8:38 ` [PATCH v9 04/10] jiffies: Introduce USER_TICK_USEC and redefine TICK_USEC Rafael J. Wysocki
2018-04-06 1:09 ` Frederic Weisbecker
2018-04-06 7:20 ` Rafael J. Wysocki
2018-04-04 8:39 ` [PATCH v9 05/10] cpuidle: Return nohz hint from cpuidle_select() Rafael J. Wysocki
2018-04-06 2:44 ` Frederic Weisbecker
2018-04-06 7:24 ` Rafael J. Wysocki
2018-04-06 14:19 ` Frederic Weisbecker
2018-04-06 7:58 ` Peter Zijlstra
2018-04-06 14:23 ` Frederic Weisbecker
2018-04-06 8:11 ` Rafael J. Wysocki
2018-04-06 12:56 ` Rafael J. Wysocki
2018-04-06 15:28 ` Frederic Weisbecker
2018-04-06 14:28 ` Frederic Weisbecker
2018-04-04 8:41 ` [PATCH v9 06/10] time: tick-sched: Split tick_nohz_stop_sched_tick() Rafael J. Wysocki
2018-04-07 2:36 ` Frederic Weisbecker
2018-04-07 16:36 ` Rafael J. Wysocki
2018-04-04 8:45 ` [PATCH v9 07/10] time: hrtimer: Introduce hrtimer_next_event_without() Rafael J. Wysocki
2018-04-07 14:46 ` Frederic Weisbecker
2018-04-08 8:20 ` Rafael J. Wysocki
2018-04-08 17:58 ` Frederic Weisbecker
2018-04-04 8:47 ` [PATCH v9 08/10] sched: idle: Select idle state before stopping the tick Rafael J. Wysocki
2018-04-09 2:41 ` Frederic Weisbecker [this message]
2018-04-04 8:49 ` [PATCH v9 09/10] cpuidle: menu: Refine idle state selection for running tick Rafael J. Wysocki
2018-04-05 12:27 ` Peter Zijlstra
2018-04-05 13:51 ` Rafael J. Wysocki
2018-04-05 12:32 ` Peter Zijlstra
2018-04-05 13:52 ` Rafael J. Wysocki
2018-04-04 8:50 ` [PATCH v9 10/10] cpuidle: menu: Avoid selecting shallow states with stopped tick Rafael J. Wysocki
2018-04-05 12:47 ` Peter Zijlstra
2018-04-05 13:49 ` Rafael J. Wysocki
2018-04-05 14:11 ` Peter Zijlstra
2018-04-05 14:13 ` Peter Zijlstra
2018-04-05 14:29 ` Rafael J. Wysocki
2018-04-08 16:32 ` [PATCH v9 00/10] sched/cpuidle: Idle loop rework Rafael J. Wysocki
2018-04-09 15:58 ` Thomas Ilsche
2018-04-10 7:03 ` 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=20180409024150.GB21904@lerouge \
--to=frederic@kernel.org \
--cc=aubrey.li@linux.intel.com \
--cc=dsmythies@telus.net \
--cc=fweisbec@gmail.com \
--cc=len.brown@intel.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;
as well as URLs for NNTP newsgroup(s).