Messages in this thread Patch in this message | | | From | riel@redhat ... | Subject | [PATCH 1/2] sched,numa: fix math underflow in task_tick_numa | Date | Thu, 5 Nov 2015 15:56:22 -0500 |
| |
From: Rik van Riel <riel@redhat.com>
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.
Signed-off-by: Rik van Riel <riel@redhat.com> Reported-and-tested-by: Jan Stancek <jstancek@redhat.com> --- kernel/sched/fair.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 824aa9f501a3..f04fda8f669c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -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; -- 2.1.0
| |