Messages in this thread | | | Subject | Re: [sched-devel, patch-rfc] rework of "prioritize non-migratable tasks over migratable ones" | From | Peter Zijlstra <> | Date | Tue, 15 Jul 2008 14:48:26 +0200 |
| |
On Tue, 2008-07-01 at 12:46 +0200, Dmitry Adamushko wrote: > 2008/6/16 Peter Zijlstra <a.p.zijlstra@chello.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.
Yeah, I realized this quite a while back, but 1) posix doesn't say anything about group scheduling like this, and 2) all the rt group scheduling stuff is still experimental :-)
I'm open to suggestion though.
| |