public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Valentin Schneider <valentin.schneider@arm.com>
To: Vincent Donnefort <vincent.donnefort@arm.com>,
	peterz@infradead.org, mingo@redhat.com,
	vincent.guittot@linaro.org
Cc: linux-kernel@vger.kernel.org, mgorman@techsingularity.net,
	dietmar.eggemann@arm.com,
	Vincent Donnefort <vincent.donnefort@arm.com>
Subject: Re: [PATCH] sched/fair: Fix detection of per-CPU kthreads waking a task
Date: Wed, 24 Nov 2021 16:28:20 +0000	[thread overview]
Message-ID: <87ilwhcycb.mognet@arm.com> (raw)
In-Reply-To: <20211124154239.3191366-1-vincent.donnefort@arm.com>

On 24/11/21 15:42, Vincent Donnefort wrote:
> select_idle_sibling() will return prev_cpu for the case where the task is
> woken up by a per-CPU kthread. However, the idle task has been recently
> modified and is now identified by is_per_cpu_kthread(), breaking the
> behaviour described above. Using !is_idle_task() ensures we do not
> spuriously trigger that select_idle_sibling() exit path.
>
> Fixes: 00b89fe0197f ("sched: Make the idle task quack like a per-CPU kthread")

This patch-set is the gift that keeps on giving... I owe a lot of folks a
lot of beer :(

> Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com>
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 945d987246c5..8bf95b0e368d 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -6399,6 +6399,7 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
>        * pattern is IO completions.
>        */
>       if (is_per_cpu_kthread(current) &&
> +	    !is_idle_task(current) &&
>           prev == smp_processor_id() &&
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
                        (1)

>           this_rq()->nr_running <= 1) {

So if we get to here, it means we failed

        if ((available_idle_cpu(target) || sched_idle_cpu(target)) &&
            asym_fits_capacity(task_util, target))
                return target;

AFAICT (1) implies "prev == target" (target can be either prev or the
waking CPU), so per the above this implies prev isn't idle. If current is
the idle task, we can still have stuff enqueued (which matches nr_running
<= 1) and be on our way to schedule_idle(), or have rq->ttwu_pending (per
idle_cpu()) - IOW matching against the idle task here can lead to undesired
coscheduling.

If the above isn't bonkers:

Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>

>               return prev;
> --
> 2.25.1

  reply	other threads:[~2021-11-24 16:28 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-24 15:42 [PATCH] sched/fair: Fix detection of per-CPU kthreads waking a task Vincent Donnefort
2021-11-24 16:28 ` Valentin Schneider [this message]
2021-11-25  9:05 ` Vincent Guittot
2021-11-25 11:16   ` Valentin Schneider
2021-11-25 13:17     ` Dietmar Eggemann
2021-11-25 13:23     ` Vincent Guittot
2021-11-25 15:30       ` Valentin Schneider
2021-11-26  8:23         ` Vincent Guittot
2021-11-26 13:32           ` Valentin Schneider
2021-11-26 14:40             ` Vincent Guittot
2021-11-26 16:49               ` Valentin Schneider
2021-11-26 17:18                 ` Vincent Donnefort
2021-11-29 15:49                   ` Vincent Guittot
2021-11-29 16:54                     ` Vincent Donnefort
2021-11-30 13:35                       ` Dietmar Eggemann
2021-11-30 15:42                       ` Vincent Guittot
2021-12-01 14:40                         ` Vincent Donnefort
2021-12-01 16:19                           ` Vincent Guittot
2021-11-29  8:36 ` [sched/fair] 8d0920b981: stress-ng.sem.ops_per_sec 11.9% improvement kernel test robot

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=87ilwhcycb.mognet@arm.com \
    --to=valentin.schneider@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@techsingularity.net \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=vincent.donnefort@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