From: Jiri Olsa <jolsa@redhat.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Jiri Olsa <jolsa@kernel.org>, Ingo Molnar <mingo@kernel.org>,
lkml <linux-kernel@vger.kernel.org>,
James Hartsock <hartsjc@redhat.com>,
Rik van Riel <riel@redhat.com>,
Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>,
Kirill Tkhai <ktkhai@parallels.com>,
Frederic Weisbecker <fweisbec@gmail.com>
Subject: Re: [PATCH 2/4] sched/fair: Introduce idle enter/exit balance callbacks
Date: Mon, 20 Jun 2016 18:27:41 +0200 [thread overview]
Message-ID: <20160620162741.GB10167@krava> (raw)
In-Reply-To: <20160620143003.GI30154@twins.programming.kicks-ass.net>
On Mon, Jun 20, 2016 at 04:30:03PM +0200, Peter Zijlstra wrote:
> On Mon, Jun 20, 2016 at 02:15:12PM +0200, Jiri Olsa wrote:
> > Introducing idle enter/exit balance callbacks to keep
> > balance.idle_cpus_mask cpumask of current idle cpus
> > in system.
> >
> > It's used only when REBALANCE_AFFINITY feature is
> > switched on. The code functionality of this feature
> > is introduced in following patch.
> >
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> > kernel/sched/fair.c | 32 ++++++++++++++++++++++++++++++++
> > kernel/sched/idle.c | 2 ++
> > kernel/sched/sched.h | 3 +++
> > 3 files changed, 37 insertions(+)
> >
> > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> > index f19c9435c64d..78c4127f2f3a 100644
> > --- a/kernel/sched/fair.c
> > +++ b/kernel/sched/fair.c
> > @@ -7802,6 +7802,37 @@ static inline int on_null_domain(struct rq *rq)
> > return unlikely(!rcu_dereference_sched(rq->sd));
> > }
> >
> > +static struct {
> > + cpumask_var_t idle_cpus_mask;
> > + atomic_t nr_cpus;
> > +} balance ____cacheline_aligned;
>
> How is this different from the nohz idle cpu mask?
well, the nohz idle cpu mask is deep in the nohz code:
tick_irq_exit
if ((idle_cpu(cpu) && !need_resched()) || tick_nohz_full_cpu(cpu)) {
if (!in_interrupt())
tick_nohz_irq_exit
if (ts->inidle) {
__tick_nohz_idle_enter(ts)
tick_nohz_idle_enter
__tick_nohz_idle_enter
if (can_stop_idle_tick(cpu, ts)) {
tick_nohz_stop_sched_tick
if (ts->tick_stopped)
nohz_balance_enter_idle(cpu) {
set idle mask for cpu
}
} else {
tick_nohz_full_update_tick(ts);
if (can_stop_full_tick(ts))
tick_nohz_stop_sched_tick
if (ts->tick_stopped)
nohz_balance_enter_idle(cpu) {
set idle mask for cpu
}
}
cpu_idle_loop
tick_nohz_idle_enter
__tick_nohz_idle_enter(ts)
tick_nohz_idle_enter
__tick_nohz_idle_enter
if (can_stop_idle_tick(cpu, ts)) {
tick_nohz_stop_sched_tick
if (ts->tick_stopped)
nohz_balance_enter_idle(cpu) {
set idle mask for cpu
}
sched_cpu_dying
nohz_balance_exit_idle(cpu) {
unset idle mask for cpu
}
trigger_load_balance
nohz_kick_needed
nohz_balance_exit_idle(cpu) {
unset idle mask for cpu
}
... I might have missed some of the paths
so it might not be that easy to switch it to use the easy
change I added as part of this RFC, but AFAIU it should be
the same idle mask, but this approach might be too naive
and miss some idle enter/exit paths.. CC-ing Frederic
thanks,
jirka
next prev parent reply other threads:[~2016-06-20 16:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-20 12:15 [RFC 0/4] sched/fair: Rebalance tasks based on affinity Jiri Olsa
2016-06-20 12:15 ` [PATCH 1/4] sched/fair: Introduce sched_entity::dont_balance Jiri Olsa
2016-06-20 14:28 ` Peter Zijlstra
2016-06-20 15:59 ` Jiri Olsa
2016-06-21 8:09 ` Peter Zijlstra
2016-06-20 12:15 ` [PATCH 2/4] sched/fair: Introduce idle enter/exit balance callbacks Jiri Olsa
2016-06-20 14:30 ` Peter Zijlstra
2016-06-20 16:27 ` Jiri Olsa [this message]
2016-06-21 8:12 ` Peter Zijlstra
2016-06-20 12:15 ` [PATCH 3/4] sched/fair: Add REBALANCE_AFFINITY rebalancing code Jiri Olsa
2016-06-30 10:58 ` Peter Zijlstra
2016-07-01 7:35 ` Jiri Olsa
2016-07-01 8:24 ` Peter Zijlstra
[not found] ` <CAM1qU8Ms2ZO5fnYRVX51uiBC5pZX6Hpa2W3Wqj5NjnYp3t8kOA@mail.gmail.com>
2016-07-01 14:58 ` Peter Zijlstra
2016-06-20 12:15 ` [PATCH 4/4] sched/fair: Add schedstat debug values for REBALANCE_AFFINITY Jiri Olsa
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=20160620162741.GB10167@krava \
--to=jolsa@redhat.com \
--cc=fweisbec@gmail.com \
--cc=hartsjc@redhat.com \
--cc=jolsa@kernel.org \
--cc=ktkhai@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=vatsa@linux.vnet.ibm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.