Messages in this thread | | | Subject | Re: [PATCH] sched/fair: Prefer idle CPU to cache affinity | From | Rik van Riel <> | Date | Sat, 27 Feb 2021 14:56:07 -0500 |
| |
On Fri, 2021-02-26 at 22:10 +0530, Srikar Dronamraju wrote:
> Current order of preference to pick a LLC while waking a wake-affine > task: > 1. Between the waker CPU and previous CPU, prefer the LLC of the CPU > that is idle. > > 2. Between the waker CPU and previous CPU, prefer the LLC of the CPU > that is less lightly loaded. > > In the current situation where waker and previous CPUs are busy, but > only one of its LLC has an idle CPU, Scheduler may end up picking a > LLC > with no idle CPUs. To mitigate this, add a new step between 1 and 2 > where Scheduler compares idle CPUs in waker and previous LLCs and > picks > the appropriate one.
I like that idea a lot. That could also solve some of the issues sometimes observed on multi-node x86 systems, and probably on the newer AMD chips with several LLCs on chip.
> + if (sched_feat(WA_WAKER) && tnr_busy < tllc_size) > + return this_cpu;
I wonder if we need to use a slightly lower threshold on very large LLCs, both to account for the fact that the select_idle_cpu code may not find the single idle CPU among a dozen busy ones, or because on a system with hyperthreading we may often be better off picking another LLC for HT contention issues?
Maybe we could use "tnr_busy * 4 < tllc_size * 3" or something like that?
That way we will only try to find the last 5 idle CPUs in a 22 CPU LLC if the other LLC also has fewer than 6 idle cores.
That might increase our chances of finding an idle CPU with SIS_PROP enabled, and might allow WA_WAKER to be true by default.
> + /* For better wakeup latency, prefer idler LLC to cache > affinity */ > + diff = tnr_busy * pllc_size - sync - pnr_busy * tllc_size; > + if (!diff) > + return nr_cpumask_bits; > + if (diff < 0) > + return this_cpu; > + > + return prev_cpu; > +}
-- All Rights Reversed. [unhandled content-type:application/pgp-signature] | |