lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180723084031.GX2494@hirez.programming.kicks-ass.net>
Date:   Mon, 23 Jul 2018 10:40:31 +0200
From:   Peter Zijlstra <peterz@...radead.org>
To:     Chen Lin <chen.lin130@....com.cn>
Cc:     mingo@...hat.com, linux-kernel@...r.kernel.org,
        jiang.biao2@....com.cn, zhong.weidong@....com.cn,
        tan.hu@....com.cn.cn, Chen Lin <cheng.lin130@....com.cn>,
        Tan Hu <tan.hu@....com.cn>
Subject: Re: [PATCH] sched/numa: do not balance tasks onto isolated cpus

On Mon, Jul 23, 2018 at 01:39:30PM +0800, Chen Lin wrote:
> From: Chen Lin <cheng.lin130@....com.cn>
> 
> NUMA balancing has not taken *isolcpus(isolated cpus)* into 
> consideration. It may migrate tasks onto isolated cpus and the 
> migrated tasks will never escape from the isolated cpus, which will
> break the isolation provided by *isolcpus* boot parameter and 
> intrduce various problems.
> 
> This patch ensure NUMA balancing not to balance tasks onto iaolated
> cpus. 

I'm not sure what kernel you're patching, but cpu_isolated_map doesn't
exist anymore. Also, if it steps on isolated CPUs, this is the wrong fix
anyway. Load-balancing should be constrained to the current root domain.

> Signed-off-by: Cheng Lin <cheng.lin130@....com.cn>
> Signed-off-by: Tan Hu <tan.hu@....com.cn>
> Signed-off-by: Jiang Biao <jiang.biao2@....com.cn>

This SoB chain is invalid.

> ---
>  kernel/sched/core.c | 9 ++++++---
>  kernel/sched/fair.c | 3 ++-
>  2 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index fe365c9..f9ce90c 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -1302,10 +1302,12 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p)
>  	if (!cpu_active(arg.src_cpu) || !cpu_active(arg.dst_cpu))
>  		goto out;
> 
> -	if (!cpumask_test_cpu(arg.dst_cpu, &arg.src_task->cpus_allowed))
> +	if ((!cpumask_test_cpu(arg.dst_cpu, &arg.src_task->cpus_allowed))
> +            || cpumask_test_cpu(arg.dst_cpu, cpu_isolated_map))
>  		goto out;
> 
> -	if (!cpumask_test_cpu(arg.src_cpu, &arg.dst_task->cpus_allowed))
> +	if ((!cpumask_test_cpu(arg.src_cpu, &arg.dst_task->cpus_allowed))
> +            || cpumask_test_cpu(arg.src_cpu, cpu_isolated_map))
>  		goto out;
> 
>  	trace_sched_swap_numa(cur, arg.src_cpu, p, arg.dst_cpu);
> @@ -5508,7 +5510,8 @@ int migrate_task_to(struct task_struct *p, int target_cpu)
>  	if (curr_cpu == target_cpu)
>  		return 0;
> 
> -	if (!cpumask_test_cpu(target_cpu, &p->cpus_allowed))
> +	if ((!cpumask_test_cpu(target_cpu, &p->cpus_allowed))
> +            || cpumask_test_cpu(target_cpu, cpu_isolated_map))
>  		return -EINVAL;
> 
>  	/* TODO: This is not properly updating schedstats */
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 2f0a0be..a91f8fe 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -1724,7 +1724,8 @@ static void task_numa_find_cpu(struct task_numa_env *env,
> 
>  	for_each_cpu(cpu, cpumask_of_node(env->dst_nid)) {
>  		/* Skip this CPU if the source task cannot migrate */
> -		if (!cpumask_test_cpu(cpu, &env->p->cpus_allowed))
> +		if ((!cpumask_test_cpu(cpu, &env->p->cpus_allowed))
> +                    || cpumask_test_cpu(cpu, cpu_isolated_map))
>  			continue;
> 
>  		env->dst_cpu = cpu;
> --
> 1.8.3.1
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ