]> git.baikalelectronics.ru Git - kernel.git/commit
sched/numa: Do not move past the balance point if unbalanced
authorRik van Riel <riel@redhat.com>
Tue, 3 Feb 2015 21:56:48 +0000 (16:56 -0500)
committerIngo Molnar <mingo@kernel.org>
Wed, 18 Feb 2015 15:18:00 +0000 (16:18 +0100)
commit717f79e073ef80cd3905655de6e82b90f53cf6ca
treed2d38a8c439295c04639861cae298f379e4e50b6
parentc25b83bb2e42128bcb8cbfac0943d778943ed1ee
sched/numa: Do not move past the balance point if unbalanced

There is a subtle interaction between the logic introduced in commit
601c9a4f4cdf ("sched/numa: Allow task switch if load imbalance improves"),
the way the load balancer counts the load on each NUMA node, and the way
NUMA hinting faults are done.

Specifically, the load balancer only counts currently running tasks
in the load, while NUMA hinting faults may cause tasks to stop, if
the page is locked by another task.

This could cause all of the threads of a large single instance workload,
like SPECjbb2005, to migrate to the same NUMA node. This was possible
because occasionally they all fault on the same few pages, and only one
of the threads remains runnable. That thread can move to the process's
preferred NUMA node without making the imbalance worse, because nothing
else is running at that time.

The fix is to check the direction of the net moving of load, and to
refuse a NUMA move if it would cause the system to move past the point
of balance.  In an unbalanced state, only moves that bring us closer
to the balance point are allowed.

Signed-off-by: Rik van Riel <riel@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: mgorman@suse.de
Link: http://lkml.kernel.org/r/20150203165648.0e9ac692@annuminas.surriel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/sched/fair.c