sched/topology: Optimize topology_span_sane()

JIRA: https://issues.redhat.com/browse/RHEL-39277

commit 05037e5f0f17935a86861f9610f941ebf346a95e
Author: Kyle Meyer <kyle.meyer@hpe.com>
Date:   Wed Apr 10 16:33:11 2024 -0500

    sched/topology: Optimize topology_span_sane()

    Optimize topology_span_sane() by removing duplicate comparisons.

    Since topology_span_sane() is called inside of for_each_cpu(), each
    previous CPU has already been compared against every other CPU. The
    current CPU only needs to be compared against higher-numbered CPUs.

    The total number of comparisons is reduced from N * (N - 1) to
    N * (N - 1) / 2 on each non-NUMA scheduling domain level.

    Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
    Reviewed-by: Yury Norov <yury.norov@gmail.com>
    Acked-by: Vincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: Yury Norov <yury.norov@gmail.com>

Signed-off-by: Phil Auld <pauld@redhat.com>
This commit is contained in:
Phil Auld 2024-05-29 10:46:37 -04:00
parent 64fe21a6c2
commit b8e14fc25c
1 changed files with 2 additions and 4 deletions

View File

@ -2346,7 +2346,7 @@ static struct sched_domain *build_sched_domain(struct sched_domain_topology_leve
static bool topology_span_sane(struct sched_domain_topology_level *tl,
const struct cpumask *cpu_map, int cpu)
{
int i;
int i = cpu + 1;
/* NUMA levels are allowed to overlap */
if (tl->flags & SDTL_OVERLAP)
@ -2358,9 +2358,7 @@ static bool topology_span_sane(struct sched_domain_topology_level *tl,
* breaking the sched_group lists - i.e. a later get_group() pass
* breaks the linking done for an earlier span.
*/
for_each_cpu(i, cpu_map) {
if (i == cpu)
continue;
for_each_cpu_from(i, cpu_map) {
/*
* We should 'and' all those masks with 'cpu_map' to exactly
* match the topology we're about to build, but that can only