Re: [PATCH 06/16] sched: SCHED_DEADLINE push and pull logic

From: Hillf Danton
Date: Thu Apr 12 2012 - 08:56:04 EST


On Thu, Apr 12, 2012 at 8:51 PM, Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> On Thu, 2012-04-12 at 20:28 +0800, Hillf Danton wrote:
>> On Wed, Apr 11, 2012 at 10:10 PM, Steven Rostedt <rostedt@xxxxxxxxxxx> 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
>

Which is the current task, and where?

>
>>
>> Â Â Â 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
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/