lkml.org 
[lkml]   [2021]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: sched/core] sched/topology: Introduce sched_group::flags
    The following commit has been merged into the sched/core branch of tip:

    Commit-ID: 048679b6a675a83f6f54f2775e61fc0f647c9c2b
    Gitweb: https://git.kernel.org/tip/048679b6a675a83f6f54f2775e61fc0f647c9c2b
    Author: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    AuthorDate: Fri, 10 Sep 2021 18:18:15 -07:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Sat, 18 Sep 2021 12:18:39 +02:00

    sched/topology: Introduce sched_group::flags

    There exist situations in which the load balance needs to know the
    properties of the CPUs in a scheduling group. When using asymmetric
    packing, for instance, the load balancer needs to know not only the
    state of dst_cpu but also of its SMT siblings, if any.

    Use the flags of the child scheduling domains to initialize scheduling
    group flags. This will reflect the properties of the CPUs in the
    group.

    A subsequent changeset will make use of these new flags. No functional
    changes are introduced.

    Originally-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Reviewed-by: Len Brown <len.brown@intel.com>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Link: https://lkml.kernel.org/r/20210911011819.12184-3-ricardo.neri-calderon@linux.intel.com
    ---
    kernel/sched/sched.h | 1 +
    kernel/sched/topology.c | 21 ++++++++++++++++++---
    2 files changed, 19 insertions(+), 3 deletions(-)

    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index 148d5d3..71bc710 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -1808,6 +1808,7 @@ struct sched_group {
    unsigned int group_weight;
    struct sched_group_capacity *sgc;
    int asym_prefer_cpu; /* CPU of highest priority in group */
    + int flags;

    /*
    * The CPUs this group covers.
    diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
    index 4e8698e..c56faae 100644
    --- a/kernel/sched/topology.c
    +++ b/kernel/sched/topology.c
    @@ -716,8 +716,20 @@ cpu_attach_domain(struct sched_domain *sd, struct root_domain *rd, int cpu)
    tmp = sd;
    sd = sd->parent;
    destroy_sched_domain(tmp);
    - if (sd)
    + if (sd) {
    + struct sched_group *sg = sd->groups;
    +
    + /*
    + * sched groups hold the flags of the child sched
    + * domain for convenience. Clear such flags since
    + * the child is being destroyed.
    + */
    + do {
    + sg->flags = 0;
    + } while (sg != sd->groups);
    +
    sd->child = NULL;
    + }
    }

    for (tmp = sd; tmp; tmp = tmp->parent)
    @@ -916,10 +928,12 @@ build_group_from_child_sched_domain(struct sched_domain *sd, int cpu)
    return NULL;

    sg_span = sched_group_span(sg);
    - if (sd->child)
    + if (sd->child) {
    cpumask_copy(sg_span, sched_domain_span(sd->child));
    - else
    + sg->flags = sd->child->flags;
    + } else {
    cpumask_copy(sg_span, sched_domain_span(sd));
    + }

    atomic_inc(&sg->ref);
    return sg;
    @@ -1169,6 +1183,7 @@ static struct sched_group *get_group(int cpu, struct sd_data *sdd)
    if (child) {
    cpumask_copy(sched_group_span(sg), sched_domain_span(child));
    cpumask_copy(group_balance_mask(sg), sched_group_span(sg));
    + sg->flags = child->flags;
    } else {
    cpumask_set_cpu(cpu, sched_group_span(sg));
    cpumask_set_cpu(cpu, group_balance_mask(sg));
    \
     
     \ /
      Last update: 2021-09-21 09:29    [W:4.107 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site