Reduce scheduler migrations due to wake_affine
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest4 patches 9 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/4 | sched: Only immediately migrate tasks due to interrupts if prev and target CPUs share cachekernel/ | +7 | 0 replies | |
| 2/4 | sched: Allow a wakee to run on the prev_cpu if it is idle and cache-affine with the wakerkernel/ | +51 | 3 replies | |
| 3/4 | sched: Comment on why sync wakeups try to run on the current CPUkernel/ | +5 | 4 replies | |
| 4/4 | sched: Allow tasks to stack with a workqueue on the same CPUkernel/ kernel/ | +35 | 2 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [PATCH 0/4] Reduce scheduler migrations due to wake_affine
wake_affine has the impossible task of figuring out when it's best for a waker to pull a wakee towards the wakers CPU on the expectation that data locality will offset the migration. It's hurt by the fact that most wakeups cannot run on the current CPU to avoid stacking multiple tasks on one CPU by accident so it depends heavily on topology and which CPU nearby is idle. This series special cases some wake_affine decisions.
Patch 1 was already posted but is a pre-requisite for the other patches. It
avoids wake_affine pulling a task to a different node if the wakeup source is an interrupt. This is on the basis that we have little knowledge of whather the CPU servicing the interrupt is relevant to the data locality of the task being woken. The data from the interrupt itself may be a tiny proportion of the tasks working set.
Patch 2 notes that a previous CPU that is idle and cache affine with
the waker is probably a suitable idle sibling and that a search in select_idle_sibling can be avoided.
Patch 3 just adds a comment for someone who doesn't know the history of
sync wakeups
Patch 4 special cases kworkers that run on a specific CPU as they can have
a synchronous relationship between waker and wakee
The changelog includes some data but results would also be highly machine specific. For example, I noted a relatively small improvement from patch 1 while Mike Galbraith reported a significant gain on a different machine for the same workload. YMMV.
kernel/sched/fair.c | 108 +++++++++++++++++++++++++++++++++++++++--------- kernel/sched/features.h | 8 ++++ 2 files changed, 96 insertions(+), 20 deletions(-)
Signature · 1 line
2.15.0