[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231020134130.GC33965@noisy.programming.kicks-ass.net>
Date: Fri, 20 Oct 2023 15:41:30 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Yicong Yang <yangyicong@...wei.com>
Cc: mingo@...hat.com, juri.lelli@...hat.com,
vincent.guittot@...aro.org, dietmar.eggemann@....com,
tim.c.chen@...ux.intel.com, yu.c.chen@...el.com,
gautham.shenoy@....com, mgorman@...e.de, vschneid@...hat.com,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
rostedt@...dmis.org, bsegall@...gle.com, bristot@...hat.com,
prime.zeng@...wei.com, yangyicong@...ilicon.com,
jonathan.cameron@...wei.com, ego@...ux.vnet.ibm.com,
srikar@...ux.vnet.ibm.com, linuxarm@...wei.com, 21cnbao@...il.com,
kprateek.nayak@....com, wuyun.abel@...edance.com
Subject: Re: [PATCH v11 2/3] sched/fair: Scan cluster before scanning LLC in
wake-up path
On Thu, Oct 19, 2023 at 11:33:22AM +0800, Yicong Yang wrote:
> @@ -7349,8 +7373,13 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
> */
> if (prev != target && cpus_share_cache(prev, target) &&
> (available_idle_cpu(prev) || sched_idle_cpu(prev)) &&
> - asym_fits_cpu(task_util, util_min, util_max, prev))
> - return prev;
> + asym_fits_cpu(task_util, util_min, util_max, prev)) {
> + if (!static_branch_unlikely(&sched_cluster_active))
> + return prev;
> +
> + if (cpus_share_resources(prev, target))
> + return prev;
> + }
>
> /*
> * Allow a per-cpu kthread to stack with the wakee if the
> @@ -7377,7 +7406,11 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
> (available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
> cpumask_test_cpu(recent_used_cpu, p->cpus_ptr) &&
> asym_fits_cpu(task_util, util_min, util_max, recent_used_cpu)) {
> - return recent_used_cpu;
> + if (!static_branch_unlikely(&sched_cluster_active))
> + return recent_used_cpu;
> +
> + if (cpus_share_resources(recent_used_cpu, target))
> + return recent_used_cpu;
> }
>
> /*
I've changed those like so:
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7420,10 +7420,9 @@ static int select_idle_sibling(struct ta
if (prev != target && cpus_share_cache(prev, target) &&
(available_idle_cpu(prev) || sched_idle_cpu(prev)) &&
asym_fits_cpu(task_util, util_min, util_max, prev)) {
- if (!static_branch_unlikely(&sched_cluster_active))
- return prev;
- if (cpus_share_resources(prev, target))
+ if (!static_branch_unlikely(&sched_cluster_active) ||
+ cpus_share_resources(prev, target))
return prev;
}
@@ -7452,11 +7451,11 @@ static int select_idle_sibling(struct ta
(available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
cpumask_test_cpu(recent_used_cpu, p->cpus_ptr) &&
asym_fits_cpu(task_util, util_min, util_max, recent_used_cpu)) {
- if (!static_branch_unlikely(&sched_cluster_active))
- return recent_used_cpu;
- if (cpus_share_resources(recent_used_cpu, target))
+ if (!static_branch_unlikely(&sched_cluster_active) ||
+ cpus_share_resources(recent_used_cpu, target))
return recent_used_cpu;
+
}
/*
Powered by blists - more mailing lists