[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Interrupt latency problem



Hi all,

I'm having some trouble with interrupt latency and/or scheduling on my 
Etrax system. It seems that the kernel

a) Occasionally blocks interrupts for 10ms at a time.
b) Occasionally takes 10ms (very occasionally, a multiple of 10ms) from 
calling wake_up_interruptible() in the
interrupt service routine until the waiting process is actually running 
again (the process to run is set to be scheduled
with SCHED_FIFO at the highest priority, so it should IMO get the CPU 
immediately).

Does anyone have any idea what could be causing this behaviour ?

My setup is as follows:

I have a custom Etrax 100LX-based board running Linux 2.4.20. The Etrax 
talks with a FPGA that
receives data from a Philips 7113 video slicer, puts this data into a 
FIFO and then raises an interrupt
so that the Etrax can read and process the data; the processed data is 
then written back to the FPGA.
The interrupt is raised every 40ms (i.e. for each video frame). The 
application doing the processing has
two threads - one for receiving and sending data from/to the FPGA, and 
one to supervise the processing
of the data. The actual processing is done by a (variable) number of 
"filter" processes forked by the main
application. Both the main and the filter processes are set up to use 
the SCHED_FIFO policy, with the main
process running at the highest priority, and the filters one priority 
level below that. Apart from these processes,
the system is running sftpd, inetd, syslogd and ntpd. There is no disk, 
and there shouldn't be any writing to
the flash file system either.

With kind regards,
Eric