From: Ionela Voinescu <ionela.voinescu@arm.com>
To: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Ricardo Neri <ricardo.neri@intel.com>,
"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Ben Segall <bsegall@google.com>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Len Brown <len.brown@intel.com>, Mel Gorman <mgorman@suse.de>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
Steven Rostedt <rostedt@goodmis.org>,
Tim Chen <tim.c.chen@linux.intel.com>,
Valentin Schneider <vschneid@redhat.com>,
x86@kernel.org, linux-kernel@vger.kernel.org,
"Tim C . Chen" <tim.c.chen@intel.com>
Subject: Re: [PATCH v3 08/10] sched/topology: Remove SHARED_CHILD from ASYM_PACKING
Date: Mon, 6 Mar 2023 13:10:37 +0000 [thread overview]
Message-ID: <ZAXmTT0bG4qf+HKN@arm.com> (raw)
In-Reply-To: <20230305190811.GA4352@ranerica-svr.sc.intel.com>
Hey,
On Sunday 05 Mar 2023 at 11:08:11 (-0800), Ricardo Neri wrote:
> On Fri, Mar 03, 2023 at 11:29:52AM +0000, Ionela Voinescu wrote:
> > Hi Ricardo,
>
> Hi Ionela!
>
> >
> > On Monday 06 Feb 2023 at 20:58:36 (-0800), Ricardo Neri wrote:
> > > Only x86 and Power7 use ASYM_PACKING. They use it differently.
> > >
> > > Power7 has cores of equal priority, but the SMT siblings of a core have
> > > different priorities. Parent scheduling domains do not need (nor have) the
> > > ASYM_PACKING flag. SHARED_CHILD is not needed. Using SHARED_PARENT would
> > > cause the topology debug code to complain.
> > >
> > > X86 has cores of different priority, but all the SMT siblings of the core
> > > have equal priority. It needs ASYM_PACKING at the MC level, but not at the
> > > SMT level (it also needs it at upper levels if they have scheduling groups
> > > of different priority). Removing ASYM_PACKING from the SMT domain causes
> > > the topology debug code to complain.
> > >
> > > Remove SHARED_CHILD for now. We still need a topology check that satisfies
> > > both architectures.
> > >
> > > Cc: Ben Segall <bsegall@google.com>
> > > Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
> > > Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
> > > Cc: Len Brown <len.brown@intel.com>
> > > Cc: Mel Gorman <mgorman@suse.de>
> > > Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> > > Cc: Steven Rostedt <rostedt@goodmis.org>
> > > Cc: Tim C. Chen <tim.c.chen@intel.com>
> > > Cc: Valentin Schneider <vschneid@redhat.com>
> > > Cc: x86@kernel.org
> > > Cc: linux-kernel@vger.kernel.org
> > > Suggested-by: Valentin Schneider <vschneid@redhat.com>
> > > Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
> > > ---
> > > Changes since v2:
> > > * Introduced this patch.
> > >
> > > Changes since v1:
> > > * N/A
> > > ---
> > > include/linux/sched/sd_flags.h | 5 +----
> > > 1 file changed, 1 insertion(+), 4 deletions(-)
> > >
> > > diff --git a/include/linux/sched/sd_flags.h b/include/linux/sched/sd_flags.h
> > > index 57bde66d95f7..800238854ba5 100644
> > > --- a/include/linux/sched/sd_flags.h
> > > +++ b/include/linux/sched/sd_flags.h
> > > @@ -132,12 +132,9 @@ SD_FLAG(SD_SERIALIZE, SDF_SHARED_PARENT | SDF_NEEDS_GROUPS)
> > > /*
> > > * Place busy tasks earlier in the domain
> > > *
> > > - * SHARED_CHILD: Usually set on the SMT level. Technically could be set further
> > > - * up, but currently assumed to be set from the base domain
> > > - * upwards (see update_top_cache_domain()).
> > > * NEEDS_GROUPS: Load balancing flag.
> > > */
> > > -SD_FLAG(SD_ASYM_PACKING, SDF_SHARED_CHILD | SDF_NEEDS_GROUPS)
> > > +SD_FLAG(SD_ASYM_PACKING, SDF_NEEDS_GROUPS)
> >
> > While this silences the warning one would have gotten when removing
> > SD_ASYM_PACKING from SMT level, it will still result in sd_asym_packing
> > being NULL for these systems, which breaks nohz balance. That is because
> > highest_flag_domain() still stops searching at the first level without
> > the flag set, in this case SMT, even if levels above have the flag set.
>
> You are absolutely right! This how this whole discussion started. It
> slipped my mind.
>
> >
> > Maybe highest_flag_domain() should be changed to take into account the
> > metadata flags?
>
> What about the patch below? Search will stop if the flag has
> SDF_SHARED_CHILD as it does today. Otherwise it will search all the
> domains.
>
> --- a/kernel/sched/sched.h
> +++ b/kernel/sched/sched.h
> @@ -1773,6 +1773,12 @@ queue_balance_callback(struct rq *rq,
> for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
> __sd; __sd = __sd->parent)
>
> +#define SD_FLAG(name, mflags) (name * !!((mflags) & SDF_SHARED_CHILD)) |
> +static const unsigned int SD_SHARED_CHILD_MASK =
> +#include <linux/sched/sd_flags.h>
> +0;
> +#undef SD_FLAG
> +
> /**
> * highest_flag_domain - Return highest sched_domain containing flag.
> * @cpu: The CPU whose highest level of sched domain is to
> @@ -1781,15 +1787,19 @@ queue_balance_callback(struct rq *rq,
> * for the given CPU.
> *
> * Returns the highest sched_domain of a CPU which contains the given flag.
> - */
> +*/
^^^
likely an unintended change
> static inline struct sched_domain *highest_flag_domain(int cpu, int flag)
> {
> struct sched_domain *sd, *hsd = NULL;
>
> for_each_domain(cpu, sd) {
> - if (!(sd->flags & flag))
> + if (sd->flags & flag) {
> + hsd = sd;
> + continue;
> + }
> +
There might be room for a comment here:
/*
* If the flag is not set and is known to be shared with lower
* domains, stop the search, as it won't be found further up.
*/
> + if (flag & SD_SHARED_CHILD_MASK)
> break;
> - hsd = sd;
> }
>
> return hsd;
It looks nice and sane to me - I've not compiled or tested it :).
Thanks,
Ionela.
>
> >
> > Thanks,
> > Ionela.
> >
> > >
> > > /*
> > > * Prefer to place tasks in a sibling domain
> > > --
> > > 2.25.1
> > >
> > >
next prev parent reply other threads:[~2023-03-06 13:10 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-07 4:58 [PATCH v3 00/10] sched/fair: Avoid unnecessary migrations within SMT domains Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 01/10] sched/fair: Generalize asym_packing logic for SMT cores Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 02/10] sched/fair: Move is_core_idle() out of CONFIG_NUMA Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 03/10] sched/fair: Only do asym_packing load balancing from fully idle SMT cores Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 04/10] sched/fair: Let low-priority cores help high-priority busy " Ricardo Neri
2023-02-08 7:56 ` Vincent Guittot
2023-02-09 11:53 ` Peter Zijlstra
2023-02-10 0:43 ` Ricardo Neri
2023-02-10 8:41 ` Peter Zijlstra
2023-02-10 13:05 ` Ricardo Neri
2023-02-10 1:52 ` Ricardo Neri
2023-02-13 13:40 ` Dietmar Eggemann
2023-02-13 23:23 ` Ricardo Neri
2023-03-10 0:51 ` Tim Chen
2023-03-14 23:54 ` Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 05/10] sched/fair: Keep a fully_busy SMT sched group as busiest Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 06/10] sched/fair: Use the prefer_sibling flag of the current sched domain Ricardo Neri
2023-02-08 7:48 ` Vincent Guittot
2023-02-10 13:24 ` Ricardo Neri
2023-02-09 13:17 ` Chen Yu
2023-02-09 20:00 ` Chen, Tim C
2023-02-09 23:05 ` Tim Chen
2023-02-10 3:16 ` Ricardo Neri
2023-02-10 6:55 ` Chen Yu
2023-02-10 10:08 ` Peter Zijlstra
2023-02-10 14:54 ` Valentin Schneider
2023-02-10 16:53 ` Peter Zijlstra
2023-02-10 17:12 ` Valentin Schneider
2023-02-10 18:31 ` Ricardo Neri
2023-02-13 12:17 ` Dietmar Eggemann
2023-02-14 6:43 ` Ricardo Neri
2023-02-16 5:21 ` Ricardo Neri
2023-02-16 12:16 ` Peter Zijlstra
2023-02-17 1:41 ` Ricardo Neri
2023-02-23 10:09 ` Dietmar Eggemann
2023-02-24 12:29 ` Ricardo Neri
[not found] ` <tencent_60A804570F09C0CFE0495D5B984941123A05@qq.com>
2023-02-20 9:45 ` Valentin Schneider
[not found] ` <tencent_6C38D389245FD03C6E1312999FEDD394F606@qq.com>
2023-02-21 18:15 ` Valentin Schneider
2023-02-07 4:58 ` [PATCH v3 07/10] sched/fair: Do not even the number of busy CPUs via asym_packing Ricardo Neri
2023-02-13 12:44 ` Dietmar Eggemann
2023-02-13 19:47 ` Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 08/10] sched/topology: Remove SHARED_CHILD from ASYM_PACKING Ricardo Neri
2023-03-03 11:29 ` Ionela Voinescu
2023-03-05 19:08 ` Ricardo Neri
2023-03-06 13:10 ` Ionela Voinescu [this message]
2023-03-06 18:17 ` Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 09/10] x86/sched: Remove SD_ASYM_PACKING from the SMT domain flags Ricardo Neri
2023-02-07 4:58 ` [PATCH v3 10/10] x86/sched/itmt: Give all SMT siblings of a core the same priority Ricardo Neri
2023-02-09 8:07 ` [PATCH v3 00/10] sched/fair: Avoid unnecessary migrations within SMT domains Zhang, Rui
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=ZAXmTT0bG4qf+HKN@arm.com \
--to=ionela.voinescu@arm.com \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=ravi.v.shankar@intel.com \
--cc=ricardo.neri-calderon@linux.intel.com \
--cc=ricardo.neri@intel.com \
--cc=rostedt@goodmis.org \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=tim.c.chen@intel.com \
--cc=tim.c.chen@linux.intel.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=x86@kernel.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.