linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christian Loehle <christian.loehle@arm.com>
To: Joseph Salisbury <joseph.salisbury@oracle.com>,
	"Rafael J. Wysocki (Intel)" <rafael@kernel.org>
Cc: rafael.j.wysocki@intel.com, Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	frederic@kernel.org, linux-pm@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	regressions@lists.linux.dev
Subject: Re: [REGRESSION] sched/idle: Sysbench threads regression after f4c31b07b136
Date: Tue, 28 Jul 2026 09:30:39 +0100	[thread overview]
Message-ID: <774c3a68-6a6b-4e2e-a347-03e36953b750@arm.com> (raw)
In-Reply-To: <f5946a8a-43be-49d4-a827-25149112b21f@oracle.com>

On 7/24/26 18:20, Joseph Salisbury wrote:
> Hi Rafael, Christian,
> 
> On 7/6/26 10:29 AM, Christian Loehle wrote:
>> On 7/2/26 19:47, Rafael J. Wysocki (Intel) wrote:
>>> Hi,
>>>
>>> On Thu, Jul 2, 2026 at 6:30 PM Joseph Salisbury
>>> <joseph.salisbury@oracle.com> wrote:
>>>> Hi Rafael,
>>>>
>>>> We are seeing a reproducible MySQL Sysbench threads regression.  A
>>>> bisect indicated the following commit as the first bad commit:
>>>> f4c31b07b136 ("sched: idle: Consolidate the handling of two special cases")
>>>>
>>>> The regression was found in Oracle kernel performance testing on OCI VM
>>>> shapes:
>>>>
>>>> VM Details:
>>>> * VM.Standard2.1:
>>>>         x86 OCI VM shape, 1 OCPU / 2 hardware threads, about 14.5 GB RAM
>>>>
>>>>    * VM.Standard.A1.Flex.2:
>>>>         Arm/Ampere A1 flexible VM shape, 2 vCPU threads, about 10.9 GB RAM
>>>>
>>>>
>>>> The ResultsDB runs show the regression in the Sysbench threads metric:
>>>>
>>>>     - VM.Standard2.1:       333 -> 236  (-29.1%)
>>>>     - VM.Standard.A1.Flex.2: 1286 -> 1152 (-10.4%)
>>>>
>>>> A test kernel was built with f4c31b07b136 reverted and the performance
>>>> regression was recovered.
>>>>
>>>>   From the code, it is possible the regression is due to the new
>>>> previous-wakeup heuristic in the special idle cases.  Before the commit:
>>>>
>>>>     - no cpuidle driver:
>>>>         tick_nohz_idle_stop_tick()
>>>>         default_idle_call()
>>>>
>>>>     - one idle state:
>>>>         tick_nohz_idle_retain_tick()
>>>>         cpuidle state 0
>>> I think that this is your case and the tick stops for you sometimes
>>> now while it had never stopped before.
>>>
>>> Can you confirm?
> The guest-visible data does not show the single-idle-state cpuidle case.
> Both affected guests report:
> 
> /sys/devices/system/cpu/cpuidle/current_driver = none
> /sys/devices/system/cpu/cpuidle/current_governor = menu
> 
> There are also no /sys/devices/system/cpu/cpu*/cpuidle entries on either guest.  So from the guest data, this looks like the no-cpuidle-driver special case rather than the one-idle-state case.
> 
> The full revert of f4c31b07b136 recovered the regression. I also tested Rafael's suggested one-line change, applied as:
> 
>     -        idle_call_stop_or_retain_tick(stop_tick);
>    +        idle_call_stop_or_retain_tick(false);
> 
> That test kernel still showed regressed performance on VM.Standard2.1.
> 
> 
>>>
>>> Overall, it would be good to know the idle state lists for both the VM
>>> and the host.
> For the VMs, there are no guest cpuidle state lists exposed because the cpuidle driver is "none".
> 
> I do not currently have the host-side idle-state lists from the OCI hosts.  I can try to get that data if it would still be useful.
>>>
>> +1, but also which HZ are you using?
> VM.Standard2.1, x86_64:
> 
> CONFIG_HZ_1000=y
> CONFIG_HZ=1000
> 
> VM.Standard.A1.Flex.2, aarch64:
> 
> CONFIG_HZ_250=y
> CONFIG_HZ=250
> 
>> Both systems reported have 2 logical CPUs then?
> 
> Yes:
> 
> VM.Standard2.1:
> 
> CPU(s): 2
> Thread(s) per core: 2
> Core(s) per socket: 1
> Socket(s): 1
> 
> VM.Standard.A1.Flex.2:
> 
> CPU(s): 2
> Thread(s) per core: 1
> Core(s) per socket: 2
> Socket(s): 1
> 
>> Were higher core counts also
>> tested and how does it affect them?
> Yes. Higher-core-count runs were checked. The regression appears limited to the smaller core-count shapes.
> 
> The current data shows regressions on:
> 
> - VM.Standard2.1
> - VM.Standard.A1.Flex.2
> - VM.Standard.E4.Flex.1
> 
> The larger tested shapes did not show the same regression pattern. The test runs use one sysbench thread per online CPU/core count as encoded in the metric name.
> 
> 

Interesting, so your guests (no cpuidle) need the tick stopped at every
idle entry to not regress, i.e. the below?
Is there anything obvious that shows why that would be? Maybe in the
hypervisor behaviour?

----

diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 052435f4d3e3..d91a102ef028 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -194,8 +194,7 @@ static void cpuidle_idle_call(bool stop_tick)
        }
 
        if (cpuidle_not_available(drv, dev)) {
-               idle_call_stop_or_retain_tick(stop_tick);
-
+               idle_call_stop_or_retain_tick(true);
                default_idle_call();
                goto exit_idle;
        }


  reply	other threads:[~2026-07-28  8:30 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-02 16:25 [REGRESSION] sched/idle: Sysbench threads regression after f4c31b07b136 Joseph Salisbury
2026-07-02 18:47 ` Rafael J. Wysocki (Intel)
2026-07-06 14:29   ` Christian Loehle
2026-07-08 15:25     ` Joseph Salisbury
2026-07-24 17:20     ` Joseph Salisbury
2026-07-28  8:30       ` Christian Loehle [this message]
2026-07-28 16:37         ` [PATCH] sched/idle: Stop the tick when no cpuidle driver is available Christian Loehle
2026-07-29  2:36         ` [REGRESSION] sched/idle: Sysbench threads regression after f4c31b07b136 Zhan Xusheng
2026-07-29 18:03           ` Rafael J. Wysocki (Intel)
2026-07-29 18:25         ` Rafael J. Wysocki (Intel)
2026-07-30  9:27           ` Christian Loehle

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=774c3a68-6a6b-4e2e-a347-03e36953b750@arm.com \
    --to=christian.loehle@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=frederic@kernel.org \
    --cc=joseph.salisbury@oracle.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rafael@kernel.org \
    --cc=regressions@lists.linux.dev \
    --cc=vincent.guittot@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 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).