Re: [PATCH] [request for inclusion] Realtime LSM

Jack O'Quin
2005-01-19T17:48:20Z

Ingo Molnar <mingo@elte.hu> writes:

> * Ingo Molnar <mingo@elte.hu> wrote:
>
>> i'm not suggesting that this is the way to go, it's just to test how
>> nice--20 tasks would perform (on the hacked kernel). We still dont
>> have this data, because in the other tests you tried, some
>> non-highprio threads got nice--20 priority as well, which can (and
>> apparently do) interfere with the highprio threads.

I could hack the threads that the test actually uses just to get some
numbers. But, that will break some existing JACK clients.

> ('highprio threads' are the ones that normally get SCHED_FIFO priority
> with -R, 'lowprio threads' are the other client-side threads, if any.)

I usually call them `realtime threads' and `non-realtime threads'.
Means the same thing. I think of them that way, because any code
running in a realtime thread is severely constrained. It must be
written *very* carefully, almost like a hardware interrupt handler.

> to make it easier to test, i've written an API hack: with the kernel
> patch below setscheduler() will set the task to nice --20 if you use
> SCHED_FIFO and sched_priority of 1. I.e. all you need to do is to run
> Jack with -R and use an RT priority of 1 - all the highprio threads
> should then become nice --20. If you use RT prio 2 (or higher) it should
> be SCHED_FIFO again. Just apply the patch to 2.6.11-rc1 (2.6.10 might
> work too) and it will work automatically. (the hack also includes the
> earlier 'no starvation for nice--20 tasks' hack.)

Good idea, thanks.

These tests mean a lot more running "real" audio programs. :-)

> @@ -3211,6 +3211,12 @@ static inline task_t *find_process_by_pi
> static void __setscheduler(struct task_struct *p, int policy, int prio)
> {
> BUG_ON(p->array);
> + if (prio == 1 && policy != SCHED_NORMAL) {
> + p->policy = SCHED_NORMAL;
> + p->static_prio = NICE_TO_PRIO(-20);
> + p->prio = p->static_prio;
> + return;
> + }
> p->policy = policy;
> p->rt_priority = prio;
> if (policy != SCHED_NORMAL)
>

JACK actually uses three different priorities, the defaults are 9, 10
and 20. How about if I change this test?

if (prio <= 20 && policy != SCHED_NORMAL) {

Or, should that be?

if (prio > 0 && prio <= 20 && policy != SCHED_NORMAL) {
--
joq