SCHED_FIFO: sleep times longer than expected (AGAIN)

Harald Kirsch (
Fri, 23 Aug 1996 10:27:47 +0200

My problem is that a SCHED_FIFO process using a driver I'm writing is
not scheduled every jiffy although I could check that the timer
interrupt is run every 10ms and wakes up the process. I suppose
swapping cannot be the reason, because I call mlockall(MCL_FUTURE)
after allocating all necessary space with calloc.

Ingo Molnar <> wrote in a personal message to
>You most probably have found
>a bug. Try somehow to identify the point where the kernel "loops". Or try
>to switch off the ethernet device (for a test period). The xmit timeout
>really looks like such a problem: the driver tries to output data to the
>network card, but the card just doesnt want to acknowledge it, and the
>kernel waits until a previously started error-correcting timer stops the

Now that I've changed the ethernet card from Scheider&Koch to 3c509 I
experience the same behaviour. Sleep times of sometimes 100ms and more
with a SCHED_FIFO process, while timer interrupts are obviously handled.

I must admit, I have no idea of how to find out where the kernel
"loops". Any idea appreciated!

A typical timing log I get looks like this:
timer -- timer service routine of my driver
read -- immediatly after reading data
wait/end -- immediatly before and after
The times are those from do_gettimeofday. The output is produced with
printk post-mortem, i.e. there is no printk e.g. in the timer service

rti834 overflow, status=0x14a8, last sleep=0.075978
stamp[63] = 0.001496 at 840787263.009563 by timer
stamp[62] = 0.000074 at 840787263.008067 by read
stamp[61] = 0.008468 at 840787263.007993 by wait/end
stamp[60] = 0.010016 at 840787262.999525 by timer
stamp[59] = 0.009966 at 840787262.989509 by timer
stamp[58] = 0.010019 at 840787262.979543 by timer
stamp[57] = 0.010085 at 840787262.969524 by timer
stamp[56] = 0.010007 at 840787262.959439 by timer
stamp[55] = 0.009890 at 840787262.949432 by timer
stamp[54] = 0.007545 at 840787262.939542 by timer
stamp[53] = 0.000995 at 840787262.931997 by wait/start
stamp[52] = 0.000074 at 840787262.931002 by read
stamp[51] = 0.000474 at 840787262.930928 by wait/end
stamp[50] = 0.008822 at 840787262.930454 by timer
stamp[49] = 0.000863 at 840787262.921632 by wait/start

I'm working on
i468 with 30BogoMips
Linux 2.0.7
The machine is diskless, i.e. it mounts everything via nfs.

Harald Kirsch,, +49 721 6091 384 | This message is
FhG/IITB, Fraunhoferstr.1, 76131 Karlsruhe | subject oriented.