• Peter Zijlstra's avatar
    sched: Fix migrate_disable() vs rt/dl balancing · a7c81556
    Peter Zijlstra authored
    In order to minimize the interference of migrate_disable() on lower
    priority tasks, which can be deprived of runtime due to being stuck
    below a higher priority task. Teach the RT/DL balancers to push away
    these higher priority tasks when a lower priority task gets selected
    to run on a freshly demoted CPU (pull).
    
    This adds migration interference to the higher priority task, but
    restores bandwidth to system that would otherwise be irrevocably lost.
    Without this it would be possible to have all tasks on the system
    stuck on a single CPU, each task preempted in a migrate_disable()
    section with a single high priority task running.
    
    This way we can still approximate running the M highest priority tasks
    on the system.
    
    Migrating the top task away is (ofcourse) still subject to
    migrate_disable() too, which means the lower task is subject to an
    interference equivalent to the worst case migrate_disable() section.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarDaniel Bristot de Oliveira <bristot@redhat.com>
    Link: https://lkml.kernel.org/r/20201023102347.499155098@infradead.org
    a7c81556
core.c 225 KB