Christoph Lameter (Ampere) <cl@xxxxxxxxxx> 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