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