[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <b647ffbd0807010346l2833f376y4c394bcbf49fa086@mail.gmail.com>
Date: Tue, 1 Jul 2008 12:46:20 +0200
From: "Dmitry Adamushko" <dmitry.adamushko@...il.com>
To: "Peter Zijlstra" <a.p.zijlstra@...llo.nl>
Cc: "Gregory Haskins" <ghaskins@...ell.com>,
"Ingo Molnar" <mingo@...e.hu>,
"Steven Rostedt" <rostedt@...dmis.org>,
"Thomas Gleixner" <tglx@...utronix.de>,
linux-kernel@...r.kernel.org
Subject: Re: [sched-devel, patch-rfc] rework of "prioritize non-migratable tasks over migratable ones"
2008/6/16 Peter Zijlstra <a.p.zijlstra@...llo.nl>:
> On Mon, 2008-06-16 at 19:59 +0200, Dmitry Adamushko wrote:
>
>> One way or another, we have different aritifacts (and mine have likely
>> more) but conceptually, both "violates" POSIX if a strict round-robin
>> scheduling is required.
>
> http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html#tag_02_08_04_01
>
> Is quite strict on what FIFO should do, and I know of two points where
> we deviate and should work to match.
>
btw., rt group scheduling seems to well, slightly wreck this (per-rq)
FIFO model as well.
say, group_A has N SCHED_FIFO tasks of equal prio. So far so good,
they all run strictly one after another.
Now group_B gets task_S. On a group layer, group_B gets enqueued after group_A.
This changes when a current task (that belongs to group_A)
relinquishes a CPU: dequeue_stack -> __enqueue_rt_entity() will place
group_A in the tail of its list.
So the next task to run is task_S, although group_A migth have plenty
of tasks of the same prio that were enqueued ealrier.
We can't get a strict FIFO ordering with this pure tree-like hierarchy.
btw #2,
Gregory, our new modification also doesn't work nicely with group-scheduling.
We may place a task in the head of its queue, yes. But its group will
still remain where it was.
rt_se->nr_cpus_allowed just has no adequat sense for groups and
__enqueue_rt_entity() always places a group at the tail.
IOW, even if check_preempt_curr_rt() calls resched_task() based on
analysis of the newly arrived task 'p', 'p' won't be necessarily
picked up by pick_next_task_rt(). Although, there is a way to fix it.
--
Best regards,
Dmitry Adamushko
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists