Valentin Schneider 5fe7765997 sched/deadline: Make dl_rq->pushable_dl_tasks update drive dl_rq->overloaded
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:

  612f769edd06 ("sched/rt: Make rt_rq->pushable_tasks updates drive rto_mask")

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Juri Lelli <juri.lelli@redhat.com>
Link: https://lore.kernel.org/r/20230928150251.463109-1-vschneid@redhat.com
2023-09-29 10:20:21 +02:00
..
2023-09-05 11:01:47 -07:00
2023-09-04 13:20:19 -07:00
2023-08-31 12:43:10 -07:00
2023-09-01 09:38:00 -07:00
2023-09-02 11:10:50 -07:00
2023-08-30 08:17:35 -07:00
2022-09-26 10:13:13 -07:00
2023-08-18 10:18:49 -07:00
2023-09-01 15:44:45 -07:00
2023-03-24 11:01:29 +01:00
2023-08-30 09:16:56 -07:00
2023-08-23 09:38:17 +09:00
2023-06-28 15:51:08 -07:00
2023-08-18 10:12:02 -07:00
2023-06-28 16:05:21 -07:00
2023-08-15 15:26:17 -07:00