Re: [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.4]

Ingo Molnar
2004-10-31T12:19:06Z

* Lee Revell <rlrevell@joe-job.com> wrote:

> Actually this raises an interesting point. Maybe all IRQ threads
> should get the same RT priority by default, so we get FIFO scheduling
> among IRQ threads. It seems like this would make it harder for IRQ
> threads to starve each other. Then we only have to elevate the
> priority of the IRQ thread(s) we are interested in.

we could do this too. The reason why i picked the current "start at
SCHED_FIFO prio 49 and decrease it by 1 until it reaches 25, then stay
constant" logic is that typically the irqs registered first are 'more
important' - e.g. the timer interrupt.

> Another idea is to allow SCHED_FIFO processes of equal priority to
> preempt one another on a LIFO basis. Wouldn't this be very close to
> the traditional Linux interrupt model, where interrupts can interrupt
> each other and we handle the most recent interrupt first?

well, it's called SCHED_*FIFO* for a reason :-) What might make sense is
a SCHED_LIFO policy. But, i'm not so sure it's the right thing to do:
the best work-queueing model is almost always FIFO, as it gives the best
possible fairness between equals.

Fairness also often translates into better performance, because a system
that 'fluctuates' due to LIFO often underperforms a FIFO one because
when it fluctuates towards lower load it under-utilizes the resources,
and when it fluctuates up it overloads. LIFO makes sense for anonymous
resources like pages/slabs where LIFO allocation leads to better cache
utilization. But i'd say for non-anonymous workloads it's almost always
a loss.

Ingo