sched/numa: Fix math underflow in task_tick_numa()
The NUMA balancing code implements delays in scanning by advancing curr->node_stamp beyond curr->se.sum_exec_runtime. With unsigned math, that creates an underflow, which results in task_numa_work being queued all the time, even when we don't want to. Avoiding the math underflow makes it possible to reduce CPU overhead in the NUMA balancing code. Reported-and-tested-by: Jan Stancek <jstancek@redhat.com> 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: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: mgorman@suse.de Link: http://lkml.kernel.org/r/1446756983-28173-2-git-send-email-riel@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Родитель
66ef3493d4
Коммит
25b3e5a334
|
@ -2302,7 +2302,7 @@ void task_tick_numa(struct rq *rq, struct task_struct *curr)
|
|||
now = curr->se.sum_exec_runtime;
|
||||
period = (u64)curr->numa_scan_period * NSEC_PER_MSEC;
|
||||
|
||||
if (now - curr->node_stamp > period) {
|
||||
if (now > curr->node_stamp + period) {
|
||||
if (!curr->node_stamp)
|
||||
curr->numa_scan_period = task_scan_min(curr);
|
||||
curr->node_stamp += period;
|
||||
|
|
Загрузка…
Ссылка в новой задаче