All of lore.kernel.org
 help / color / mirror / Atom feed
From: Valentin Schneider <valentin.schneider@arm.com>
To: Dietmar Eggemann <dietmar.eggemann@arm.com>,
	linux-kernel@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@kernel.org>,
	Vincent Guittot <vincent.guittot@linaro.org>
Subject: Re: [PATCH v2 2/2] sched/fair: Trigger nohz.next_balance updates when a CPU goes NOHZ-idle
Date: Mon, 19 Jul 2021 17:28:44 +0100	[thread overview]
Message-ID: <878s22mfnn.mognet@arm.com> (raw)
In-Reply-To: <e8dffbaf-71cb-d3b3-04e8-64fc8e6256af@arm.com>

On 19/07/21 17:24, Dietmar Eggemann wrote:
> On 19/07/2021 12:31, Valentin Schneider wrote:
>
> [...]
>
>> @@ -10351,6 +10352,9 @@ static void nohz_balancer_kick(struct rq *rq)
>>  unlock:
>>      rcu_read_unlock();
>>  out:
>> +	if (READ_ONCE(nohz.needs_update))
>> +		flags |= NOHZ_NEXT_KICK;
>> +
>
> Since NOHZ_NEXT_KICK is part of NOHZ_KICK_MASK, some conditions above
> will already set it in flags. Is this intended?

So if no kick would be issued (e.g. flags == 0 because nohz.next_balance is
later in the future), then this does the right thing and issues a
NOHZ_NEXT_KICK one.

However you're right to point out that even if nohz.needs_update is false,
we can set NOHZ_NEXT_KICK into the ilb rq's NOHZ flags due to it being
included in NOHZ_KICK_MASK, which I think is a mistake. Looking at it now,
it shouldn't be part of NOHZ_KICK_MASK.

>
>>      if (flags)
>>              kick_ilb(flags);
>>  }
>> @@ -10447,12 +10451,13 @@ void nohz_balance_enter_idle(int cpu)
>>      /*
>>       * Ensures that if nohz_idle_balance() fails to observe our
>>       * @idle_cpus_mask store, it must observe the @has_blocked
>> -	 * store.
>> +	 * and @needs_update stores.
>>       */
>>      smp_mb__after_atomic();
>>
>>      set_cpu_sd_state_idle(cpu);
>>
>> +	WRITE_ONCE(nohz.needs_update, 1);
>>  out:
>>      /*
>>       * Each time a cpu enter idle, we assume that it has blocked load and
>> @@ -10501,13 +10506,17 @@ static void _nohz_idle_balance(struct rq *this_rq, unsigned int flags,
>
> function header would need update to incorporate the new 'update
> nohz.next_balance' functionality. It only talks about 'update of blocked
> load' and 'complete load balance' so far.
>
>>      /*
>>       * We assume there will be no idle load after this update and clear
>>       * the has_blocked flag. If a cpu enters idle in the mean time, it will
>> -	 * set the has_blocked flag and trig another update of idle load.
>> +	 * set the has_blocked flag and trigger another update of idle load.
>>       * Because a cpu that becomes idle, is added to idle_cpus_mask before
>>       * setting the flag, we are sure to not clear the state and not
>>       * check the load of an idle cpu.
>> +	 *
>> +	 * Same applies to idle_cpus_mask vs needs_update.
>>       */
>>      if (flags & NOHZ_STATS_KICK)
>>              WRITE_ONCE(nohz.has_blocked, 0);
>> +	if (flags & NOHZ_NEXT_KICK)
>> +		WRITE_ONCE(nohz.needs_update, 0);
>>
>>      /*
>>       * Ensures that if we miss the CPU, we must see the has_blocked
>> @@ -10531,6 +10540,8 @@ static void _nohz_idle_balance(struct rq *this_rq, unsigned int flags,
>>              if (need_resched()) {
>>                      if (flags & NOHZ_STATS_KICK)
>>                              has_blocked_load = true;
>
> This looks weird now? 'has_blocked_load = true' vs
> 'WRITE_ONCE(nohz.needs_update, 1)'.
>

Well, has_blocked_load lets us factorize the nohz.has_blocked write
(one is needed either when aborting or at the tail of the cpumask
iteration), whereas there is just a single write for nohz.needs_update
(when aborting).

>> +			if (flags & NOHZ_NEXT_KICK)
>> +				WRITE_ONCE(nohz.needs_update, 1);
>>                      goto abort;
>>              }
>>
>>

  reply	other threads:[~2021-07-19 18:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-19 10:31 [PATCH v2 0/2] sched/fair: nohz.next_balance vs newly-idle CPUs Valentin Schneider
2021-07-19 10:31 ` [PATCH v2 1/2] sched/fair: Add NOHZ balancer flag for nohz.next_balance updates Valentin Schneider
2021-08-10 13:33   ` Vincent Guittot
2021-07-19 10:31 ` [PATCH v2 2/2] sched/fair: Trigger nohz.next_balance updates when a CPU goes NOHZ-idle Valentin Schneider
2021-07-19 15:24   ` Dietmar Eggemann
2021-07-19 16:28     ` Valentin Schneider [this message]
2021-07-20 10:47       ` Dietmar Eggemann

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=878s22mfnn.mognet@arm.com \
    --to=valentin.schneider@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --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 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.