Linux Power Management development
 help / color / mirror / Atom feed
From: Christian Loehle <christian.loehle@arm.com>
To: Mete Durlu <meted@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Anna-Maria Behnsen <anna-maria@linutronix.de>,
	Frederic Weisbecker <frederic@kernel.org>,
	Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Daniel Lezcano <daniel.lezcano@kernel.org>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>,
	Ilya Leoshkevich <iii@linux.ibm.com>,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH v2 0/5] s390/idle: CPU idle driver
Date: Wed, 17 Jun 2026 08:15:37 +0100	[thread overview]
Message-ID: <445a6ab5-3574-4493-9187-701ee7ea7c28@arm.com> (raw)
In-Reply-To: <93743121-2f6f-441b-8675-4eaa92647b4d@linux.ibm.com>

On 6/10/26 21:23, Mete Durlu wrote:
> On 6/9/26 5:47 PM, Christian Loehle wrote:
>> On 6/9/26 14:24, Mete Durlu wrote:
>>> v1 -> v2:
>>>
>>> * Add idle driver enteries to MAINTAINERS file (Christian Loehle)
>>> * Remove extra line break left in drivers/cpuidle/Kconfig.s390
>>>    (Christian Loehle)
>>>
>>> This patch series introduces a CPU idle driver for s390
>>> architecture that leverages the existing cpu idle infrastructure and
>>> TEO (Timer Events Oriented) governor to optimize idle state selection
>>> based on timer events and interrupt patterns.
>>
>> So if (according to v1) there's no data (yet) that teo is much preferred,
>> I would remove all mentions of it in code and patch descriptions?
>> A cpuidle driver requiring a specific governor sort-of violates the
>> abstraction.
> 
> True, s/TEO governor/idle governor/g + s/TEO/idle governor/g should
> be good enough.
> 
>> In case teo does work much better for you, which I wouldn't doubt for
>> a second from what your system looks like, it would be nice to present
>> some data on it. Additionally I think setting it in the defconfig alone
>> is probably enough?
>>
> 
> I ran a quick menu vs teo run on an LPAR.
> There was no significant change between the results of the benchmarks
> except for slightly higher cpu utilization when using menu governor. I
> can put it down to the cover letter. The only noticeable change is on my
> micro benchmark where I use epoll_wait() to make two threads on
> different cores ping each other.
> 
> micro-benchmark |   teo    |   menu
> -------------------------------------
> avg time        | ~21.6sec | ~24.3sec
> 
> Idle framework tries to find the specified governor in the driver struct
> but if it can't find it or no governor was specified it uses the next
> available one, so setting teo on defconfig and disabling rest of the
> governors can be good enough to pick teo.
> 

Thanks for testing!

> 
>>> - Configuration
>>> -----------------------------------------------------------------------
>>>
>>> Idle state parameters are tuned per hypervisor type after benchmarks:
>>>
>>> **LPAR:**
>>> - Polling: 5us target residency, 0us exit latency
>>> - EW: 5us target residency, 5us exit latency
>>>
>>> **KVM/z/VM:**
>>> - Polling: 1us target residency, 0us exit latency
>>> - EW: 1us target residency, 1us exit latency
>>>
>> I think this would also be useful in cpuidle-s390.c in particular the
>> different residency+latency values for LPAR and KVM/z/VM and what they aim
>> to achieve for you.
> 
> We can put down a comment like below;
> 
> /*
>  * After various benchmark runs the tuneables for idle driver has shown
>  * the best performance with the following values;
>  * for LPAR:
>  * - Polling: 5us target residency, 0us exit latency
>  * - EW: 5us target residency, 5us exit latency
>  *
>  * for KVM/z/VM:
>  * - Polling: 1us target residency, 0us exit latency
>  * - EW: 1us target residency, 1us exit latency
>  */
> 
> Is that what you are looking for or something more extensive to cover
> what sort of behavior it causes and why it benefits the performance?
> I wouldn't really like to put down lengthy comments here to be honest.

Why not?
At least to me the values are hard to follow and without knowing what they
represent.
For example is this actually the worst case exit latency for these systems?
Also from a cpuidle perspective residency == latency isn't outright wrong
but certainly always a little suspicious.

> 
>> Additionally polling is initialised to 0/0 by poll_state.c, so I don't know
>> where you're taking these values from?
> 
> Having a look at the implementation of poll_idle() in poll_state.c.
> The polling time limit (target_residency) is acquired from
> cpuidle_poll_time(), which tries to find an enabled state deeper than
> polling state and returns its target_residency. Since we only have two
> states, it automatically means EW state's target_residency, or
> IDLE_POLL_MAX if it is disabled.

I agree that cpuidle_poll_time() can derive the polling time limit from a
deeper enabled state, but it only does that for states with
target_residency_ns >= CPUIDLE_POLL_MIN (10us). With the proposed s390 EW
values of 1us/5us, that state is skipped and the poll limit falls
back to CPUIDLE_POLL_MAX (TICK_NSEC / 16).


> 
> If I am not mistaken governor also uses the next enabled state
> to calculate the target_residency of the polling state.
> 

With just two state that is practically what happens in the selection
algorithm anyway, yes.

      parent reply	other threads:[~2026-06-17  7:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-09 13:24 [PATCH v2 0/5] s390/idle: CPU idle driver Mete Durlu
2026-06-09 13:24 ` [PATCH v2 1/5] s390/tick: Remove CIF_NOHZ_DELAY flag Mete Durlu
2026-06-09 13:24 ` [PATCH v2 2/5] tick: Remove arch_needs_cpu Mete Durlu
2026-06-09 15:16   ` Thomas Gleixner
2026-06-09 13:24 ` [PATCH v2 3/5] s390: Enable TIF_POLLING_NRFLAG Mete Durlu
2026-06-09 13:24 ` [PATCH v2 4/5] s390/idle: Introduce cpuidle for s390 Mete Durlu
2026-06-09 13:24 ` [PATCH v2 5/5] s390/configs: Enable cpuidle driver on s390 Mete Durlu
2026-06-09 14:11 ` [PATCH v2 0/5] s390/idle: CPU idle driver Heiko Carstens
2026-06-09 15:47 ` Christian Loehle
2026-06-10 20:23   ` Mete Durlu
2026-06-15 12:24     ` Mete Durlu
2026-06-17  7:15     ` Christian Loehle [this message]

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=445a6ab5-3574-4493-9187-701ee7ea7c28@arm.com \
    --to=christian.loehle@arm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=anna-maria@linutronix.de \
    --cc=borntraeger@linux.ibm.com \
    --cc=daniel.lezcano@kernel.org \
    --cc=frederic@kernel.org \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=iii@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=meted@linux.ibm.com \
    --cc=mingo@kernel.org \
    --cc=rafael@kernel.org \
    --cc=svens@linux.ibm.com \
    --cc=tglx@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox