• Byungchul Park's avatar
    sched/fair: Fix switched_to_fair()'s per entity load tracking · 6efdb105
    Byungchul Park authored
    
    
    Where switched_from_fair() will remove the entity's load from the
    runqueue, switched_to_fair() does not currently add it back. This
    means that when a task leaves the fair class for a short duration; say
    because of PI; we loose its load contribution.
    
    This can ripple forward and disturb the load tracking because other
    operations (enqueue, dequeue) assume its factored in. Only once the
    runqueue empties will the load tracking recover.
    
    When we add it back in, age the per entity average to match up with
    the runqueue age. This has the obvious problem that if the task leaves
    the fair class for a significant time, the load will age to 0.
    
    Employ the normal migration rule for inter-runqueue moves in
    task_move_group_fair(). Again, there is the obvious problem of the
    task migrating while not in the fair class.
    
    The alternative solution would be to to omit the chunk in
    attach_entity_load_avg(), which would effectively reset the timestamp
    and use whatever avg there was.
    Signed-off-by: default avatarByungchul Park <byungchul.park@lge.com>
    [ Rewrote the changelog and comments. ]
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: yuyang.du@intel.com
    Link: http://lkml.kernel.org/r/1440069720-27038-5-git-send-email-byungchul.park@lge.com
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    6efdb105
fair.c 218 KB