From: Peter Zijlstra <peterz@infradead.org>
To: Valentin Schneider <valentin.schneider@arm.com>
Cc: mingo@kernel.org, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, juri.lelli@redhat.com,
rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
linux-kernel@vger.kernel.org, qperret@google.com,
qais.yousef@arm.com, ktkhai@virtuozzo.com
Subject: Re: [PATCH 1/7] sched: Fix pick_next_task() vs change pattern race
Date: Fri, 8 Nov 2019 21:49:40 +0100 [thread overview]
Message-ID: <20191108204940.GL3079@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <e19c566b-dc14-a5aa-de4f-c67cdb17620c@arm.com>
On Fri, Nov 08, 2019 at 04:05:25PM +0000, Valentin Schneider wrote:
> On 08/11/2019 13:15, Peter Zijlstra wrote:
> > +static int balance_rt(struct rq *rq, struct task_struct *p, struct rq_flags *rf)
> > +{
> > + if (!on_rt_rq(&p->rt) && need_pull_rt_task(rq, p)) {
> > + /*
> > + * This is OK, because current is on_cpu, which avoids it being
> > + * picked for load-balance and preemption/IRQs are still
> > + * disabled avoiding further scheduler activity on it and we've
> > + * not yet started the picking loop.
> > + */
> > + rq_unpin_lock(rq, rf);
> > + pull_rt_task(rq);
> > + rq_repin_lock(rq, rf);
> > + }
> > +
> > + return sched_stop_runnable(rq) || sched_dl_runnable(rq) || sched_rt_runnable(rq);
>
> So we already have some dependencies on the class ordering (e.g. fair->idle),
> but I'm wondering if would it make sense to have these runnable functions be
> defined as sched_class callbacks?
>
> e.g.
>
> rt_sched_class.runnable = rt_runnable
>
> w/ rt_runnable() just being a non-inlined sched_rt_runnable() you define
> further down the patch (or a wrapper to it). The balance return pattern could
> then become:
>
> for_class_range(class, sched_class_highest, rt_sched_class->next)
> if (class->runnable(rq))
> return true;
> return false;
>
> (and replace rt_sched_class by whatever class' balance callback this is)
>
> It's a bit neater, but I'm pretty sure it's going to run worse :/
> The only unaffected one would be fair, since newidle_balance() already does
> that "for free".
Yeah, it'll be pretty terrible :/
That said, I might have some clues on how to get rid of all the indirect
calls, but I need to play around a bit. It'll be invasive though :/
(like that ever stopped me).
next prev parent reply other threads:[~2019-11-08 20:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-08 13:15 [PATCH 0/7] scheduler patches Peter Zijlstra
2019-11-08 13:15 ` [PATCH 1/7] sched: Fix pick_next_task() vs change pattern race Peter Zijlstra
2019-11-08 14:28 ` Quentin Perret
2019-11-08 16:05 ` Valentin Schneider
2019-11-08 20:49 ` Peter Zijlstra [this message]
2019-11-08 17:03 ` Qais Yousef
2019-11-08 13:15 ` [PATCH 2/7] sched/fair: Better document newidle_balance() Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2019-11-08 13:15 ` [PATCH 3/7] sched: Make pick_next_task_idle() more consistent Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] sched/core: " tip-bot2 for Peter Zijlstra
2019-11-08 13:15 ` [PATCH 4/7] sched: Optimize pick_next_task() Peter Zijlstra
2019-11-08 14:33 ` Quentin Perret
2019-11-08 16:46 ` Vincent Guittot
2019-11-08 20:46 ` Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] sched/core: " tip-bot2 for Peter Zijlstra
2019-11-08 13:15 ` [PATCH 5/7] sched: Simplify sched_class::pick_next_task() Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] sched/core: " tip-bot2 for Peter Zijlstra
2019-11-08 13:15 ` [PATCH 6/7] sched/fair: Use mul_u32_u32() Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2019-11-08 13:16 ` [PATCH 7/7] sched: Further clarify sched_class::set_next_task() Peter Zijlstra
2019-11-11 9:32 ` [tip: sched/core] sched/core: " tip-bot2 for Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191108204940.GL3079@worktop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=ktkhai@virtuozzo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=qais.yousef@arm.com \
--cc=qperret@google.com \
--cc=rostedt@goodmis.org \
--cc=valentin.schneider@arm.com \
--cc=vincent.guittot@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox