Messages in this thread | | | Subject | Re: [RFC][PATCH 15/16] sched: Trivial forced-newidle balancer | From | Valentin Schneider <> | Date | Thu, 21 Feb 2019 18:28:34 +0000 |
| |
On 21/02/2019 16:47, Peter Zijlstra wrote: [...] >>> IIUC, we're trying to find/steal tasks matching the core_cookie from other >>> rqs because dst has been cookie-forced-idle. >>> >>> If the p we find isn't running, what's the meaning of core_occupation? >>> I would have expected it to be 0, but we don't seem to be clearing it when >>> resetting the state in pick_next_task(). >> >> Indeed. We preserve the occupation from the last time around; it's not >> perfect but its better than nothing. >> >> Consider there's two groups; and we just happen to run the other group. >> Then our occopation, being what it was last, is still accurate. When >> next we run, we'll again get that many siblings together. >> >>> If it is running, we prevent the stealing if the core it's on is running >>> more matching tasks than the core of the pulling rq. It feels to me as if >>> that's a balancing tweak to try to cram as many matching tasks as possible >>> in a single core, so to me this reads as "don't steal my tasks if I'm >>> running more than you are, but I will steal tasks from you if I'm given >>> the chance". Is that correct? >> >> Correct, otherwise an SMT4 with 5 tasks could end up ping-ponging the >> one task forever. >>
Wouldn't we want to move some tasks in those cases? If we're going newidle we're guaranteed to have a thread for that extra task.
So
if (p->core_occupation == cpumask_weight(cpu_smt_mask(that))
we could want to steal, overriding the occupation comparison (we already have a (p == src->core_pick) abort before). Kind of feels like CFS stealing that steals when nr_running > 1.
>> Note that a further condition a little up the callchain from here only >> does this stealing if the thread was forced-idle -- ie. it had something >> to run anyway. So under the condition where there simple aren't enough >> tasks to keep all siblings busy, we'll not compact just cause. > > Better example; it will avoid stealing a task from a full SMT2 core to > fill another. >
Aye, that's the scenario I was thinking of.
Thanks for clearing things up.
| |