• Valentin Schneider's avatar
    sched/deadline: Make dl_rq->pushable_dl_tasks update drive dl_rq->overloaded · 5fe77659
    Valentin Schneider authored
    dl_rq->dl_nr_migratory is increased whenever a DL entity is enqueued and it has
    nr_cpus_allowed > 1. Unlike the pushable_dl_tasks tree, dl_rq->dl_nr_migratory
    includes a dl_rq's current task. This means a dl_rq can have a migratable
    current, N non-migratable queued tasks, and be flagged as overloaded and have
    its CPU set in the dlo_mask, despite having an empty pushable_tasks tree.
    
    Make an dl_rq's overload logic be driven by {enqueue,dequeue}_pushable_dl_task(),
    in other words make DL RQs only be flagged as overloaded if they have at
    least one runnable-but-not-current migratable task.
    
     o push_dl_task() is unaffected, as it is a no-op if there are no pushable
       tasks.
    
     o pull_dl_task() now no longer scans runqueues whose sole migratable task is
       their current one, which it can't do anything about anyway.
       It may also now pull tasks to a DL RQ with dl_nr_running > 1 if only its
       current task is migratable.
    
    Since dl_rq->dl_nr_migratory becomes unused, remove it.
    
    RT had the exact same mechanism (rt_rq->rt_nr_migratory) which was dropped
    in favour of relying on rt_rq->pushable_tasks, see:
    
      612f769e ("sched/rt: Make rt_rq->pushable_tasks updates drive rto_mask")
    Signed-off-by: default avatarValentin Schneider <vschneid@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Acked-by: default avatarJuri Lelli <juri.lelli@redhat.com>
    Link: https://lore.kernel.org/r/20230928150251.463109-1-vschneid@redhat.com
    5fe77659
sched.h 91.8 KB