Messages in this thread | | | Date | Wed, 27 Sep 2023 12:11:33 -0400 | Subject | Re: [PATCH 2/2] sched/fair: skip the cache hot CPU in select_idle_cpu() | From | Mathieu Desnoyers <> |
| |
On 9/26/23 06:11, Chen Yu wrote: > Problem statement: > When task p is woken up, the scheduler leverages select_idle_sibling() > to find an idle CPU for it. p's previous CPU is usually a preference > because it can improve cache locality. However in many cases, the > previous CPU has already been taken by other wakees, thus p has to > find another idle CPU. > > Proposal: > Inspired by Mathieu's idea[1], introduce the SIS_CACHE. It considers > the sleep time of the task for better task placement. Based on the > task's short sleeping history, keep p's previous CPU idle for a short > while. Later when p is woken up, it can choose its previous CPU in > select_idle_sibling(). When p's previous CPU is reserved, another wakee > is not allowed to choose this CPU in select_idle_idle(). The reservation > period is set to the task's average short sleep time, AKA, se->sis_rsv_avg. > > This does not break the work conservation of the scheduler, because > wakee will still try its best to find an idle CPU. The difference is that > different idle CPUs might have different priorities. > > Prateek pointed out that, with SIS_CACHE enabled, if all idle CPUs are > cache-hot, select_idle_cpu() might have to choose a non-idle target CPU, > which brings task stacking. Mitigate this by returning the first cache-hot > idle CPU if no cache-cold CPU is found.
I've tried your patches on my reference hackbench workload:
./hackbench -g 32 -f 20 --threads --pipe -l 480000 -s 100
Unfortunately they don't appear to help for that specific load.
Thanks,
Mathieu
-- Mathieu Desnoyers EfficiOS Inc. https://www.efficios.com
| |