All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: Rik van Riel <riel@redhat.com>, linux-kernel@vger.kernel.org
Cc: arjan@linux.intel.com, khilman@ti.com, len.brown@intel.com,
	rafael.j.wysocki@intel.com, javi.merino@arm.com,
	tuukka.tikkanen@linaro.org
Subject: Re: [PATCH 1/3] cpuidle,x86: increase forced cut-off for polling to 20us
Date: Thu, 29 Oct 2015 14:02:21 +0100	[thread overview]
Message-ID: <563218DD.302@linaro.org> (raw)
In-Reply-To: <563208FC.4060407@redhat.com>

On 10/29/2015 12:54 PM, Rik van Riel wrote:
> On 10/29/2015 06:17 AM, Daniel Lezcano wrote:
>> On 10/28/2015 11:46 PM, riel@redhat.com wrote:
>>> From: Rik van Riel <riel@redhat.com>
>>>
>>> The cpuidle menu governor has a forced cut-off for polling at 5us,
>>> in order to deal with firmware that gives the OS bad information
>>> on cpuidle states, leading to the system spending way too much time
>>> in polling.
>>
>> May be I am misunderstanding your explanation but it is not how I read
>> the code.
>>
>> The default idle state is C1 (hlt) if no other states suits the
>> constraint. If a timer is happening really soon, then set the default
>> idle state to POLL if no other idle state suits the constraint.
>>
>> That applies only on x86.
>
> With the current code, the default idle state is C1 (hlt) even if
> C1 does not suit the constraint.
>
>> This is not related to break-even but exit latency.
>
> Why would we not care about break-even for C1?
>
> On systems where going into C1 for too-short periods wastes
> power, why would we waste the power when we expect a very
> short sleep?
>
>> IMO, we should just drop this 5us and the POLL state selection in the
>> menu governor as we have since a while hyper fast C1 exit. Except a few
>> embedded processors where polling is not adequate.
>
> We have hyper fast C1 exit on Nehalem and newer high performance
> chips. On those chips, we will pick C1 (or deeper) when we have
> an expected sleep time of just a few microseconds.
>
> However, on Atom, and for the paravirt cpuidle driver I am
> working on, C1 exit latency and target residence are higher
> than the cut-off hardcoded in the menu governor.
>
>> Furthermore, the number of times the poll state is selected vs the other
>> states is negligible.
>
> And it will continue to be with this patch, on CPUs with
> hyper fast C1 exit.
>
> Which makes me confused about what your are objecting to,
> since the system should continue to be have the way you want,
> with the patch applied.

Ok, I don't object the correctness of your patch but the reasoning 
behind this small optimization which bring us a lot of mess in the 
cpuidle code.

As you are touching this part of the code, I take the opportunity to 
raise a discussion about it.

 From my POV, the poll state is *not* an idle state. It is like a 
vehicle burnout [1].

But it is inserted into the idle state tables using a trick with a macro 
CPUIDLE_DRIVER_STATE_START which already led us to some bugs.

So instead of falling back into the poll state under certain 
circumstances, I propose we extract this state from the idle state table 
and we let the menu governor to fail choosing a state (or not).

 From the caller, we decide what to do (poll or C1) if the idle state 
selection fails or we choose to poll *before* like what we already have 
in kernel/sched/idle.c:

in the idle loop:

if (cpu_idle_force_poll || tick_check_broadcast_expired())
	cpu_idle_poll();
else
	cpuidle_idle_call();

By this way, we:

1) factor out the idle state selection with the find_deepest_idle_state
2) remove the CPUIDLE_DRIVER_STATE_START macro
3) concentrate the optimization logic outside of a governor which will 
benefit to all architectures

Does it make sense ?

   -- Daniel

[1] https://en.wikipedia.org/wiki/Burnout_%28vehicle%29


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


  reply	other threads:[~2015-10-29 13:02 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-28 22:46 [PATCH 0/3] cpuidle: small improvements & fixes for menu governor riel
2015-10-28 22:46 ` [PATCH 1/3] cpuidle,x86: increase forced cut-off for polling to 20us riel
2015-10-29 10:17   ` Daniel Lezcano
2015-10-29 11:54     ` Rik van Riel
2015-10-29 13:02       ` Daniel Lezcano [this message]
2015-10-28 22:46 ` [PATCH 2/3] cpuidle,menu: use interactivity_req to disable polling riel
2015-10-28 22:46 ` [PATCH 3/3] cpuidle,menu: smooth out measured_us calculation riel
2015-11-03 22:05 ` [PATCH 0/3] cpuidle: small improvements & fixes for menu governor Rafael J. Wysocki
2015-11-03 22:35   ` Rik van Riel
2015-11-03 23:03     ` Rafael J. Wysocki
2015-11-04  6:56       ` Joe Perches
2015-11-04 14:02         ` Rafael J. Wysocki
2015-11-04 15:56           ` Joe Perches
  -- strict thread matches above, loose matches on Subject: below --
2015-11-03 22:34 [PATCH 0/3] cpuidle: small improvements & fixes for menu governor (resend) riel
2015-11-03 22:34 ` [PATCH 1/3] cpuidle,x86: increase forced cut-off for polling to 20us riel
2015-11-04 16:00   ` Arjan van de Ven

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=563218DD.302@linaro.org \
    --to=daniel.lezcano@linaro.org \
    --cc=arjan@linux.intel.com \
    --cc=javi.merino@arm.com \
    --cc=khilman@ti.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=riel@redhat.com \
    --cc=tuukka.tikkanen@linaro.org \
    /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.