Re: [PATCH 1/6] sched: migration changes for core scheduling

From: Peter Zijlstra
Date: Mon Mar 22 2021 - 09:16:14 EST


On Mon, Mar 22, 2021 at 08:31:09PM +0800, Li, Aubrey wrote:
> Please let me know if I put cookie match check at the right position
> in task_hot(), if so, I'll obtain some performance data of it.
>
> Thanks,
> -Aubrey
>
> =======================================================
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 7f2fb08..d4bdcf9 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -1912,6 +1912,13 @@ static void task_numa_find_cpu(struct task_numa_env *env,
> if (!cpumask_test_cpu(cpu, env->p->cpus_ptr))
> continue;
>
> + /*
> + * Skip this cpu if source task's cookie does not match
> + * with CPU's core cookie.
> + */
> + if (!sched_core_cookie_match(cpu_rq(cpu), env->p))
> + continue;
> +
> env->dst_cpu = cpu;
> if (task_numa_compare(env, taskimp, groupimp, maymove))
> break;

This one might need a little help too, I've not fully considered NUMA
balancing though.

> @@ -6109,7 +6120,9 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t
> for_each_cpu_wrap(cpu, cpus, target) {
> if (!--nr)
> return -1;
> - if (available_idle_cpu(cpu) || sched_idle_cpu(cpu))
> +
> + if ((available_idle_cpu(cpu) || sched_idle_cpu(cpu)) &&
> + sched_cpu_cookie_match(cpu_rq(cpu), p))
> break;
> }
>

This doesn't even apply... That code has changed.

> @@ -7427,6 +7440,14 @@ static int task_hot(struct task_struct *p, struct lb_env *env)
>
> if (sysctl_sched_migration_cost == -1)
> return 1;
> +
> + /*
> + * Don't migrate task if the task's cookie does not match
> + * with the destination CPU's core cookie.
> + */
> + if (!sched_core_cookie_match(cpu_rq(env->dst_cpu), p))
> + return 1;
> +
> if (sysctl_sched_migration_cost == 0)
> return 0;
>

Should work I think, but you've put it in a weird spot for breaking up
that sysctl_sched_migration_cost thing. I'd have put it either in front
or after that other SMT thing we have there.