Messages in this thread | | | Subject | Re: [PATCH 06/16] sched: SCHED_DEADLINE push and pull logic | From | Steven Rostedt <> | Date | Thu, 12 Apr 2012 08:51:49 -0400 |
| |
On Thu, 2012-04-12 at 20:28 +0800, Hillf Danton wrote: > On Wed, Apr 11, 2012 at 10:10 PM, Steven Rostedt <rostedt@goodmis.org> wrote: > > On Fri, 2012-04-06 at 21:39 +0800, Hillf Danton wrote: > > > >> > +static void inc_dl_migration(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq) > >> > +{ > >> > + dl_rq = &rq_of_dl_rq(dl_rq)->dl; > >> > + > >> > + dl_rq->dl_nr_total++; > >> > + if (dl_se->nr_cpus_allowed > 1) > >> > + dl_rq->dl_nr_migratory++; > >> > + > >> > + update_dl_migration(dl_rq); > >> > >> if (dl_se->nr_cpus_allowed > 1) { > >> dl_rq->dl_nr_migratory++; > >> /* No change in migratory, no update of migration */ > > > > This is not true. As dl_nr_total changed. If there was only one dl task > > queued that can migrate, and then another dl task is queued but this > > task can not migrate, the update_dl_migration still needs to be called. > > As dl_nr_migratory would be 1, but now dl_nr_total > 1. This means we > > are now overloaded. > >
You're speaking in riddles.
> if (2 == dl_nr_migratory + dl_nr_total) > rq was not overloaded; > > after enqueuing a deadline task that is not migratory,
Now rq would be overloaded because:
dl_nr_migratory + dl_nr_total == 3
> > if (current task is not preempted) > rq remains not overloaded;
s/not//
> > else if (current task is not pushed out) { > if (rq is not overloaded) > maintenance of overloaded is __corrupted__; > } > > btw, same behavior in RTS?
I still don't understand what you are saying.
I can see your scenario happening with the change you are suggesting though.
-- Steve
| |