[PATCH v8 01/11] cpuidle/poll_state: poll via smp_cond_load_relaxed()
Ankur Arora
ankur.a.arora at oracle.com
Thu Oct 17 11:36:45 PDT 2024
Christoph Lameter (Ampere) <cl at gentwo.org> writes:
> On Wed, 16 Oct 2024, Ankur Arora wrote:
>
>> > The other core will wake our core up by sending an IPI. The IPI will
>> > invoke a scheduler function on our core and the WFE will continue.
>>
>> Why? The target core is not sleeping. It is *polling* on a memory
>> address (on arm64, via LDXR; WFE). Ergo an IPI is not needed to tell
>> it that a need-resched bit is set.
>
> The IPI is sent to interrupt the process that is not sleeping. This is
> done so the busy processor can reschedule the currently running process
> and respond to the event.
The scheduler treats idle specially (if the architecture defines
TIF_POLLING_NRFLAG). There's also the sched_wake_idle_without_ipi
tracepoint for this path.
$ sudo perf stat -e sched:sched_wake_idle_without_ipi perf bench sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
Total time: 5.173 [sec]
5.173613 usecs/op
193288 ops/sec
Performance counter stats for 'perf bench sched pipe':
1,992,368 sched:sched_wake_idle_without_ipi
5.178976487 seconds time elapsed
0.396076000 seconds user
6.999566000 seconds sys
--
ankur
More information about the linux-arm-kernel
mailing list