aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zijlstra <[email protected]>2017-04-10 13:20:45 +0200
committerIngo Molnar <[email protected]>2017-04-14 10:26:36 +0200
commitbb0bd044e65c2bf0f26b29613fcc441dfdeedf14 (patch)
tree1248b06e789e378c26652059d9efeda6951085c8
parent3841cdc31099fe3b84c93903c63e3d60348c0ea1 (diff)
sched/fair: Increase PELT accuracy for small tasks
We truncate (and loose) the lower 10 bits of runtime in ___update_load_avg(), this means there's a consistent bias to under-account tasks. This is esp. significant for small tasks. Cure this by only forwarding last_update_time to the point we've actually accounted for, leaving the remainder for the next time. Reported-by: Morten Rasmussen <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Acked-by: Morten Rasmussen <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Mike Galbraith <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: [email protected] Signed-off-by: Ingo Molnar <[email protected]>
-rw-r--r--kernel/sched/fair.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d43e9ac9c3c5..1e3b99a9ab69 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2915,7 +2915,8 @@ ___update_load_avg(u64 now, int cpu, struct sched_avg *sa,
delta >>= 10;
if (!delta)
return 0;
- sa->last_update_time = now;
+
+ sa->last_update_time += delta << 10;
/*
* Now we know we crossed measurement unit boundaries. The *_avg