Re: [patch] Real-Time Preemption, -RT-2.6.12-rc3-V0.7.46-01

Daniel Walker
2005-04-22T21:15:34Z

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1025 bytes --]

t
On Fri, 22 Apr 2005, Inaky Perez-Gonzalez wrote:

> >>>>> Ingo Molnar <mingo@elte.hu> writes:
>
> >> this includes fixes from Daniel Walker, which could fix the plist
> >> related slowdown bugs:
>
> > there are still some problems remaining: i just ran Esben Nielsen's
> > priority-inheritance validation testsuite, and the plist code gives
> > a worst-case latency of 9.0 msecs.
>
> With which machine is this?
>
> I tried to reproduce with V0.7.45-01 in my 2xPIII 0.9 Ghz I cannot get
> more than 1.9ms when doing 2000 samples repeatedly (60 iterations and
> counting).
>
> Did you use other parameters to 'test'?
>
> # cnt=0
> # while true
> > do echo -n "$cnt "
> > ./test --samples 2000 file.hist 2>&1 | grep maximum; cnt=$(($cnt+1))
> > done
>
> With 2.6.12-rc3-V0.7.46-02 I get:

It's still to high , it should be under a millisecond ..

I'm still testing but the times get better with this patch . I was
initializing the lists to 0, instead of MAX_INT . Let me know if it
changes anything.

Daniel

[-- Attachment #2: Type: TEXT/PLAIN, Size: 954 bytes --]

Index: linux-2.6.11/include/linux/plist.h
===================================================================
--- linux-2.6.11.orig/include/linux/plist.h 2005-04-22 19:36:54.000000000 +0000
+++ linux-2.6.11/include/linux/plist.h 2005-04-22 19:38:29.000000000 +0000
@@ -251,7 +251,7 @@
static inline void plist_del_init(struct plist *pl, struct plist *plist)
{
plist_del (pl, plist);
- plist_init(pl, 0);
+ plist_init(pl, INT_MAX);
}

/* Return the priority a pl node */
Index: linux-2.6.11/kernel/rt.c
===================================================================
--- linux-2.6.11.orig/kernel/rt.c 2005-04-22 15:05:33.000000000 +0000
+++ linux-2.6.11/kernel/rt.c 2005-04-22 19:36:29.000000000 +0000
@@ -939,6 +939,7 @@

set_task_state(task, TASK_UNINTERRUPTIBLE);

+ plist_init (&waiter.list, task->prio);
task_blocks_on_lock(&waiter, task, lock, eip);

TRACE_BUG_ON(!irqs_disabled());