sched: Fix update_cfs_load() synchronization
Using cfs_rq->nr_running is not sufficient to synchronize update_cfs_load with the put path since nr_running accounting occurs at deactivation. It's also not safe to make the removal decision based on load_avg as this fails with both high periods and low shares. Resolve this by clipping history after 4 periods without activity. Note: the above will always occur from update_shares() since in the last-task-sleep-case that task will still be cfs_rq->curr when update_cfs_load is called. Signed-off-by: Paul Turner <pjt@google.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <20101115234937.933428187@google.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -355,7 +355,7 @@ struct cfs_rq {
|
||||
|
||||
u64 load_avg;
|
||||
u64 load_period;
|
||||
u64 load_stamp;
|
||||
u64 load_stamp, load_last;
|
||||
|
||||
unsigned long load_contribution;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user