[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180108221851.GV29822@worktop.programming.kicks-ass.net>
Date: Mon, 8 Jan 2018 23:18:51 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: subhra mazumdar <subhra.mazumdar@...cle.com>
Cc: linux-kernel@...r.kernel.org, mingo@...hat.com,
steven.sistare@...cle.com, dhaval.giani@...cle.com
Subject: Re: [RFC PATCH V2] sched: Improve scalability of select_idle_sibling
using SMT balance
On Mon, Jan 08, 2018 at 02:12:37PM -0800, subhra mazumdar wrote:
> @@ -2751,6 +2763,31 @@ context_switch(struct rq *rq, struct task_struct *prev,
> struct task_struct *next, struct rq_flags *rf)
> {
> struct mm_struct *mm, *oldmm;
> + int this_cpu = rq->cpu;
> + struct sched_domain *sd;
> + int prev_busy, next_busy;
> +
> + if (rq->curr_util == UTIL_UNINITIALIZED)
> + prev_busy = 0;
> + else
> + prev_busy = (prev != rq->idle);
> + next_busy = (next != rq->idle);
> +
> + /*
> + * From sd_llc downward update the SMT utilization.
> + * Skip the lowest level 0.
> + */
> + sd = rcu_dereference_sched(per_cpu(sd_llc, this_cpu));
> + if (next_busy != prev_busy) {
> + for_each_lower_domain(sd) {
> + if (sd->level == 0)
> + break;
> + sd_context_switch(sd, rq, next_busy - prev_busy);
> + }
> + }
> +
No, we're not going to be adding atomic ops here. We've been arguing
over adding a single memory barrier to this path, atomic are just not
going to happen.
Also this is entirely the wrong way to do this, we already have code
paths that _know_ if they're going into or coming out of idle.
Powered by blists - more mailing lists