From: "Li, Aubrey" <aubrey.li@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Aubrey Li <aubrey.li@intel.com>,
tglx@linutronix.de, peterz@infradead.org, len.brown@intel.com,
ak@linux.intel.com, tim.c.chen@linux.intel.com,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v2 5/8] timers: keep sleep length updated as needed
Date: Tue, 17 Oct 2017 14:10:08 +0800 [thread overview]
Message-ID: <2e464ec4-b573-434a-e3df-baa00d1f7284@linux.intel.com> (raw)
In-Reply-To: <35931824.svOhBhJZiB@aspire.rjw.lan>
On 2017/10/17 7:58, Rafael J. Wysocki wrote:
> On Monday, October 16, 2017 8:46:41 AM CEST Li, Aubrey wrote:
>> On 2017/10/14 8:56, Rafael J. Wysocki wrote:
>>> On Saturday, September 30, 2017 9:20:31 AM CEST Aubrey Li wrote:
>>>> sleep length indicates how long we'll be idle. Currently, it's updated
>>>> only when tick nohz enters. These patch series make a new requirement
>>>> with tick, so we should keep sleep length updated as needed
>>>
>>> So what exactly would be the problem with leaving things as they are?
>>
>> Previously ts->sleep_length is only updated when tick is stopped.
>>
>> As follows, in
>>
>> __tick_nohz_idle_enter()
>> {
>> if (can_stop_idle_tick() /* return true */) {
>> tick_nohz_stop_sched_tick()
>> |
>> |-----> update sleep_length
>> }
>> }
>
> Which is logical, because the tick will get in the way if we don't stop it,
> won't it?
>
The scenario here is, tick(4ms) is too long for a short idle(e.g. 4us).
And there could be hundreds of short idle within one tick interval.
>>
>> Now ts->sleep_length is required out of tick_nohz_idle_enter(), so we want
>> to update sleep_length every time we read it
>>
>> If we leave it unchanged, the prediction could read a sleep_length long time
>> ago if the system keep ticking.
>
> Well, but does it make sense to estimate the sleep length without stopping
> the tick?
For example, for the first short idle, we just turned tick off last time, so
we may get the sleep length = 3900us. Then we keep tick on, and the 100th short
idle comes, then the original sleep length is still 3900us(not updated), but
actually it should be e.g. 100us.
>
>>>> ---
>>>> kernel/time/tick-sched.c | 3 +++
>>>> 1 file changed, 3 insertions(+)
>>>>
>>>> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
>>>> index d663fab..94fb9b8 100644
>>>> --- a/kernel/time/tick-sched.c
>>>> +++ b/kernel/time/tick-sched.c
>>>> @@ -1008,8 +1008,11 @@ void tick_nohz_irq_exit(void)
>>>> */
>>>> ktime_t tick_nohz_get_sleep_length(void)
>>>> {
>>>> + struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev);
>>>> struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched);
>>>>
>>>> + ts->sleep_length = ktime_sub(dev->next_event, ktime_get());
>>>> +
>>>> return ts->sleep_length;
>>>> }
>>>>
>>>>
>>>
>>> I probably wouldn't do it this way ...
>>>
>>>
>>
>> May I know the detailed thoughts?
>
> That depends on the answer above. :-)
Does the above explanation address the concern?
Thanks,
-Aubrey
next prev parent reply other threads:[~2017-10-17 6:10 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-30 7:20 [RFC PATCH v2 0/8] Introduct cpu idle prediction functionality Aubrey Li
2017-09-30 7:20 ` [RFC PATCH v2 1/8] cpuidle: menu: extract " Aubrey Li
2017-10-14 0:26 ` Rafael J. Wysocki
2017-10-16 2:46 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 2/8] cpuidle: record the overhead of idle entry Aubrey Li
2017-10-14 0:35 ` Rafael J. Wysocki
2017-10-16 3:11 ` Li, Aubrey
2017-10-17 0:05 ` Rafael J. Wysocki
2017-10-17 7:04 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 3/8] cpuidle: add a new predict interface Aubrey Li
2017-10-14 0:45 ` Rafael J. Wysocki
2017-10-16 8:04 ` Li, Aubrey
2017-10-14 1:27 ` Rafael J. Wysocki
2017-10-16 9:52 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 4/8] tick/nohz: keep tick on for a fast idle Aubrey Li
2017-10-14 0:51 ` Rafael J. Wysocki
2017-10-16 3:26 ` Li, Aubrey
2017-10-16 4:45 ` Mike Galbraith
2017-10-16 5:34 ` Li, Aubrey
2017-10-16 6:25 ` Mike Galbraith
2017-10-16 6:31 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 5/8] timers: keep sleep length updated as needed Aubrey Li
2017-10-14 0:56 ` Rafael J. Wysocki
2017-10-16 6:46 ` Li, Aubrey
2017-10-16 23:58 ` Rafael J. Wysocki
2017-10-17 6:10 ` Li, Aubrey [this message]
2017-09-30 7:20 ` [RFC PATCH v2 6/8] cpuidle: make fast idle threshold tunable Aubrey Li
2017-10-14 0:59 ` Rafael J. Wysocki
2017-10-16 6:00 ` Li, Aubrey
2017-10-17 0:01 ` Rafael J. Wysocki
2017-10-17 6:12 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 7/8] cpuidle: introduce irq timing to make idle prediction Aubrey Li
2017-10-14 1:01 ` Rafael J. Wysocki
2017-10-16 6:03 ` Li, Aubrey
2017-09-30 7:20 ` [RFC PATCH v2 8/8] cpuidle: introduce run queue average idle " Aubrey Li
2017-10-14 1:02 ` Rafael J. Wysocki
2017-10-14 1:14 ` [RFC PATCH v2 0/8] Introduct cpu idle prediction functionality Rafael J. Wysocki
2017-10-16 7:44 ` Li, Aubrey
2017-10-17 0:07 ` Rafael J. Wysocki
2017-10-17 7:32 ` Li, Aubrey
2017-11-30 1:00 ` Li, Aubrey
2017-11-30 1:37 ` 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=2e464ec4-b573-434a-e3df-baa00d1f7284@linux.intel.com \
--to=aubrey.li@linux.intel.com \
--cc=ak@linux.intel.com \
--cc=aubrey.li@intel.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.