[lkml]   [2008]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [sched-devel, patch-rfc] rework of "prioritize non-migratable tasks over migratable ones"
2008/6/16 Peter Zijlstra <>:
> 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.
> 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

 \ /
  Last update: 2008-07-01 12:49    [W:0.086 / U:0.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site