Hi all.
I'm starting a Linux project that is going to use an ARM 9 processor.
I need good soft realtime performance in that project. So I originally planned to use Kernel 2.6.
Reading appropriate informations and comments from many sources I learned that using 2.6 is not always advisable for small embedded projects. The main reasons being (1) the much larger memory footprint conflicting with the small 1st level cache and nonexisting 2nd level cache of these processors. The most critical area for that effect was detected to be the O(1) scheduler that uses much more code than the 2.4 O(n) scheduler, while with only some 10-20 processes the O(1) scheduler is not faster than the O(n) version.
Moreover (2) the higher time slice scheduling rate of 1 instead of 10 msec results in unnecessarily increased overhead. In my project I will not need fast time slices, as the running "real time" user processes all will be triggered by hardware timers (device drivers) and don't need to run "virtually in parallel". So I suppose they will preempt each other according to priority and not by time slices.
So my questions are:
(1) Should I better use v2.4 with the Kernel preemption patch ?
I did some tests with that and I found that the patch does not help much, when the IDE driver is used for a non-realtime process that runs concurrently with a high priority realtime process. There was a max latency of several 100 msec on a normal PC architecture. It seemed better with network instead of IDE, but I did not do much test on that setup and I was not clever enough to imagine other kernel stuff but file activity that should be preempted by a high priority user process. The embedded ARM project will not do too much IDE driver work (supposedly not much file activity at all), so maybe the Kernel preemption patch might do a better job here, but a compact flash drive is planned be included and used sporadically. I would not like to see realtime problems here. I read that the 2.6 IDE driver is completely new and much improved. Is there a 2.4 back port of the new version ?
(2) if using 2.6, is it possible to remove the O(1) scheduler and use a
2.6 version of the O(n) scheduler ?(3) is it possible to set the time slice scheduling rate to 10 msec in a
2.6 Kernel ?-Michael