lkml.org 
[lkml]   [1996]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectSCHED_FIFO: sleep times longer than expected (AGAIN)

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 <mingo@pc5829.hil.siemens.at> wrote in a personal message to
me:
>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
>operation.

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/start,
wait/end -- immediatly before and after
interruptible_sleep_on
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
routine.

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
16MB
Linux 2.0.7
The machine is diskless, i.e. it mounts everything via nfs.

Regards,
Harald.
-------------------------------------------------+------------------
Harald Kirsch, kir@iitb.fhg.de, +49 721 6091 384 | This message is
FhG/IITB, Fraunhoferstr.1, 76131 Karlsruhe | subject oriented.

\
 
 \ /
  Last update: 2005-03-22 13:38    [W:0.048 / U:21.108 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site