From: Ankur Arora <ankur.a.arora@oracle.com>
To: Shuai Xue <xueshuai@linux.alibaba.com>
Cc: Ankur Arora <ankur.a.arora@oracle.com>,
linux-pm@vger.kernel.org, kvm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
catalin.marinas@arm.com, will@kernel.org, x86@kernel.org,
pbonzini@redhat.com, vkuznets@redhat.com, rafael@kernel.org,
daniel.lezcano@linaro.org, peterz@infradead.org, arnd@arndb.de,
lenb@kernel.org, mark.rutland@arm.com, harisokn@amazon.com,
mtosatti@redhat.com, sudeep.holla@arm.com, cl@gentwo.org,
maz@kernel.org, misono.tomohiro@fujitsu.com, maobibo@loongson.cn,
zhenglifeng1@huawei.com, joao.m.martins@oracle.com,
boris.ostrovsky@oracle.com, konrad.wilk@oracle.com
Subject: Re: [PATCH v10 10/11] arm64: idle: export arch_cpu_idle()
Date: Sun, 13 Apr 2025 20:46:52 -0700 [thread overview]
Message-ID: <87ikn75rrn.fsf@oracle.com> (raw)
In-Reply-To: <f384a766-d91a-4db5-9ed6-c1ed6079da1d@linux.alibaba.com>
Shuai Xue <xueshuai@linux.alibaba.com> writes:
> 在 2025/4/12 04:57, Ankur Arora 写道:
>> Shuai Xue <xueshuai@linux.alibaba.com> writes:
>>
>>> 在 2025/2/19 05:33, Ankur Arora 写道:
>>>> Needed for cpuidle-haltpoll.
>>>> Acked-by: Will Deacon <will@kernel.org>
>>>> Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
>>>> ---
>>>> arch/arm64/kernel/idle.c | 1 +
>>>> 1 file changed, 1 insertion(+)
>>>> diff --git a/arch/arm64/kernel/idle.c b/arch/arm64/kernel/idle.c
>>>> index 05cfb347ec26..b85ba0df9b02 100644
>>>> --- a/arch/arm64/kernel/idle.c
>>>> +++ b/arch/arm64/kernel/idle.c
>>>> @@ -43,3 +43,4 @@ void __cpuidle arch_cpu_idle(void)
>>>> */
>>>> cpu_do_idle();
>>>
>>> Hi, Ankur,
>>>
>>> With haltpoll_driver registered, arch_cpu_idle() on x86 can select
>>> mwait_idle() in idle threads.
>>>
>>> It use MONITOR sets up an effective address range that is monitored
>>> for write-to-memory activities; MWAIT places the processor in
>>> an optimized state (this may vary between different implementations)
>>> until a write to the monitored address range occurs.
>> MWAIT is more capable than WFE -- it allows selection of deeper idle
>> state. IIRC C2/C3.
>>
>>> Should arch_cpu_idle() on arm64 also use the LDXR/WFE
>>> to avoid wakeup IPI like x86 monitor/mwait?
>> Avoiding the wakeup IPI needs TIF_NR_POLLING and polling in idle support
>> that this series adds.
>> As Haris notes, the negative with only using WFE is that it only allows
>> a single idle state, one that is fairly shallow because the event-stream
>> causes a wakeup every 100us.
>> --
>> ankur
>
> Hi, Ankur and Haris
>
> Got it, thanks for explaination :)
>
> Comparing sched-pipe performance on Rund with Yitian 710, *IPC improved 35%*:
Thanks for testing Shuai. I wasn't expecting the IPC to improve by quite
that much :). The reduced instructions make sense since we don't have to
handle the IRQ anymore but we would spend some of the saved cycles
waiting in WFE instead.
I'm not familiar with the Yitian 710. Can you check if you are running
with WFE? That's the __smp_cond_load_relaxed_timewait() path vs the
__smp_cond_load_relaxed_spinwait() path in [0]. Same question for the
Kunpeng 920.
Also, I'm working on a new version of the series in [1]. Would you be
okay trying that out?
Thanks
Ankur
[0] https://lore.kernel.org/lkml/20250203214911.898276-1-ankur.a.arora@oracle.com/
[1] https://lore.kernel.org/lkml/20250203214911.898276-4-ankur.a.arora@oracle.com/
> w/o haltpoll
> Performance counter stats for 'CPU(s) 0,1' (5 runs):
>
> 32521.53 msec task-clock # 2.000 CPUs utilized ( +- 1.16% )
> 38081402726 cycles # 1.171 GHz ( +- 1.70% )
> 27324614561 instructions # 0.72 insn per cycle ( +- 0.12% )
> 181 sched:sched_wake_idle_without_ipi # 0.006 K/sec
>
> w/ haltpoll
> Performance counter stats for 'CPU(s) 0,1' (5 runs):
>
> 9477.15 msec task-clock # 2.000 CPUs utilized ( +- 0.89% )
> 21486828269 cycles # 2.267 GHz ( +- 0.35% )
> 23867109747 instructions # 1.11 insn per cycle ( +- 0.11% )
> 1925207 sched:sched_wake_idle_without_ipi # 0.203 M/sec
>
> Comparing sched-pipe performance on QEMU with Kunpeng 920, *IPC improved 10%*:
>
> w/o haltpoll
> Performance counter stats for 'CPU(s) 0,1' (5 runs):
>
> 34,007.89 msec task-clock # 2.000 CPUs utilized ( +- 8.86% )
> 4,407,859,620 cycles # 0.130 GHz ( +- 84.92% )
> 2,482,046,461 instructions # 0.56 insn per cycle ( +- 88.27% )
> 16 sched:sched_wake_idle_without_ipi # 0.470 /sec ( +- 98.77% )
>
> 17.00 +- 1.51 seconds time elapsed ( +- 8.86% )
>
> w/ haltpoll
> Performance counter stats for 'CPU(s) 0,1' (5 runs):
>
> 16,894.37 msec task-clock # 2.000 CPUs utilized ( +- 3.80% )
> 8,703,158,826 cycles # 0.515 GHz ( +- 31.31% )
> 5,379,257,839 instructions # 0.62 insn per cycle ( +- 30.03% )
> 549,434 sched:sched_wake_idle_without_ipi # 32.522 K/sec ( +- 30.05% )
>
> 8.447 +- 0.321 seconds time elapsed ( +- 3.80% )
>
> Tested-by: Shuai Xue <xueshuai@linux.alibaba.com>
>
> Thanks.
> Shuai
next prev parent reply other threads:[~2025-04-14 3:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-18 21:33 [PATCH v10 00/11] arm64: support poll_idle() Ankur Arora
2025-02-18 21:33 ` [PATCH v10 01/11] cpuidle/poll_state: poll via smp_cond_load_relaxed_timewait() Ankur Arora
2025-05-13 5:29 ` Ankur Arora
2025-02-18 21:33 ` [PATCH v10 02/11] cpuidle: rename ARCH_HAS_CPU_RELAX to ARCH_HAS_OPTIMIZED_POLL Ankur Arora
2025-02-18 21:33 ` [PATCH v10 03/11] Kconfig: move ARCH_HAS_OPTIMIZED_POLL to arch/Kconfig Ankur Arora
2025-02-18 21:33 ` [PATCH v10 04/11] arm64: define TIF_POLLING_NRFLAG Ankur Arora
2025-02-18 21:33 ` [PATCH v10 05/11] arm64: add support for poll_idle() Ankur Arora
2025-02-18 21:33 ` [PATCH v10 06/11] ACPI: processor_idle: Support polling state for LPI Ankur Arora
2025-02-18 21:33 ` [PATCH v10 07/11] cpuidle-haltpoll: define arch_haltpoll_want() Ankur Arora
2025-02-18 21:33 ` [PATCH v10 08/11] governors/haltpoll: drop kvm_para_available() check Ankur Arora
2025-02-24 16:57 ` Christoph Lameter (Ampere)
2025-02-25 19:06 ` Ankur Arora
2025-02-18 21:33 ` [PATCH v10 09/11] cpuidle-haltpoll: condition on ARCH_CPUIDLE_HALTPOLL Ankur Arora
2025-02-18 21:33 ` [PATCH v10 10/11] arm64: idle: export arch_cpu_idle() Ankur Arora
2025-04-11 3:32 ` Shuai Xue
2025-04-11 17:42 ` Okanovic, Haris
2025-04-11 20:57 ` Ankur Arora
2025-04-14 2:01 ` Shuai Xue
2025-04-14 3:46 ` Ankur Arora [this message]
2025-04-14 7:43 ` Shuai Xue
2025-04-15 6:24 ` Ankur Arora
2025-02-18 21:33 ` [PATCH v10 11/11] arm64: support cpuidle-haltpoll Ankur Arora
2025-05-13 5:23 ` [PATCH v10 00/11] arm64: support poll_idle() Ankur Arora
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=87ikn75rrn.fsf@oracle.com \
--to=ankur.a.arora@oracle.com \
--cc=arnd@arndb.de \
--cc=boris.ostrovsky@oracle.com \
--cc=catalin.marinas@arm.com \
--cc=cl@gentwo.org \
--cc=daniel.lezcano@linaro.org \
--cc=harisokn@amazon.com \
--cc=joao.m.martins@oracle.com \
--cc=konrad.wilk@oracle.com \
--cc=kvm@vger.kernel.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=maobibo@loongson.cn \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=misono.tomohiro@fujitsu.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=sudeep.holla@arm.com \
--cc=vkuznets@redhat.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xueshuai@linux.alibaba.com \
--cc=zhenglifeng1@huawei.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 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).