• K
    sched/numa: Init numa balancing fields of init_task · d8b163c4
    Kirill Tkhai 提交于
    We do not initialize init_task.numa_preferred_nid,
    but this value is inherited by userspace "init"
    process:
    
    rest_init()->kernel_thread(kernel_init)->do_fork(CLONE_VM);
    
    __sched_fork()
    {
    	if (clone_flags & CLONE_VM)
    		p->numa_preferred_nid = current->numa_preferred_nid;
    	else
    		p->numa_preferred_nid = -1;
    }
    
    kernel_init() becomes userspace "init" process.
    
    So, we propagate garbage nid to userspace, and it may be used
    during numa balancing.
    
    Currently, we do not have reports about this brings a problem,
    but it seem we should set it for sure.
    
    Even if init_task.numa_preferred_nid is zero, we may meet a weird
    configuration without nid#0. On sparc64, where processors are
    numbered physically, I saw a machine without cpu#1, while cpu#2
    existed. Possible, something similar may be with numa nodes.
    So, let's initialize it and be sure we're safe.
    Signed-off-by: NKirill Tkhai <ktkhai@parallels.com>
    Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Eric Paris <eparis@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Sergey Dyasly <dserrg@gmail.com>
    Link: http://lkml.kernel.org/r/1415699189.15631.6.camel@tkhaiSigned-off-by: NIngo Molnar <mingo@kernel.org>
    d8b163c4
init_task.h 7.0 KB