[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20181012092231.0bdb5cf7@sweethome>
Date: Fri, 12 Oct 2018 09:22:31 +0200
From: luca abeni <luca.abeni@...tannapisa.it>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Juri Lelli <juri.lelli@...hat.com>, mingo@...hat.com,
rostedt@...dmis.org, tglx@...utronix.de,
linux-kernel@...r.kernel.org, claudio@...dence.eu.com,
tommaso.cucinotta@...tannapisa.it, alessio.balsini@...il.com,
bristot@...hat.com, will.deacon@....com,
andrea.parri@...rulasolutions.com, dietmar.eggemann@....com,
patrick.bellasi@....com, henrik@...tad.us,
linux-rt-users@...r.kernel.org
Subject: Re: [RFD/RFC PATCH 5/8] sched: Add proxy execution
On Thu, 11 Oct 2018 14:53:25 +0200
Peter Zijlstra <peterz@...radead.org> wrote:
[...]
> > > > + if (rq->curr != rq->idle) {
> > > > + rq->proxy = rq->idle;
> > > > + set_tsk_need_resched(rq->idle);
> > > > + /*
> > > > + * XXX [juril] don't we still need to migrate
> > > > @next to
> > > > + * @owner's CPU?
> > > > + */
> > > > + return rq->idle;
> > > > + }
> > >
> > > If I understand well, this code ends up migrating the task only
> > > if the CPU was previously idle? (scheduling the idle task if the
> > > CPU was not previously idle)
> > >
> > > Out of curiosity (I admit this is my ignorance), why is this
> > > needed? If I understand well, after scheduling the idle task the
> > > scheduler will be invoked again (because of the
> > > set_tsk_need_resched(rq->idle)) but I do not understand why it is
> > > not possible to migrate task "p" immediately (I would just check
> > > "rq->curr != p", to avoid migrating the currently scheduled
> > > task).
[...]
> I think it was the safe and simple choice; note that we're not
> migrating just a single @p, but a whole chain of @p.
Ah, that's the point I was missing... Thanks for explaining, now
everything looks more clear!
But... Here is my next dumb question: once the tasks are migrated to
the other runqueue, what prevents the scheduler from migrating them
back? In particular, task p: if it is (for example) a fixed priority
task an is on this runqueue, it is probably because the FP invariant
wants this... So, the push mechanism might end up migrating p back to
this runqueue soon... No?
Another doubt: if I understand well, when a task p "blocks" on a mutex
the proxy mechanism migrates it (and the whole chain of blocked tasks)
to the owner's core... Right?
Now, I understand why this is simpler to implement, but from the
schedulability point of view shouldn't we migrate the owner to p's core
instead?
Thanks,
Luca
> rq->curr must
> not be any of the possible @p's. rq->idle, is per definition not one
> of the @p's.
>
> Does that make sense?
Powered by blists - more mailing lists