Philippe Gerum wrote: > Li Yi (Adam) wrote: > >>Hi, >> >>When a real-time thread is running, the Linux kernel will lose Timer >>Tick (and lose timer interrupts), is this the expected behavior? >> > > > No, it should not lose any tick, regardless of the Xenomai port. You are > likely observing a pecularity of the Blackfin port where Adeos moves > Linux IRQ handlers (top-halves) in thread context to work-around a high > scheduling latency source which is Blackfin specific. > > >>If yes, in this case, no interrupts will be passed to Linux domain? >>This may cause some services depending on timing in Linux domain do not >>work correctly. In another thread I read: >> >>" >>I do not know if it is what you mean, but when running Xenomai, your >>tasks are supposed to suspend sufficiently frequently to leave Linux >>tick normally. This means that if you configured CONFIG_HZ=100, your >>real-time activity (including kernel-space tasks and user-space tasks in >>primary mode) is supposed to take a break at least once every 1/100 >>second. >>-- >> Gilles Chanteperdrix. >>" >>Is this the best solution? Since there may be possibility that a >>real-time thread keep running for severl hundred ms (e.g, processing >>large block of data). >> > > > Keep in mind that real-time using a co-scheduling infrastructure in > Linux is not a matter of pure RTOS design, but rather an issue involving > a GPOS+RTOS combination. For this reason, you just should not starve > the GPOS from the critical resources it needs, and time ticks are some > of these. If you do so though, what will happen is that the ticks will > be logged at Adeos level in the various pipeline logs, and played when > Linux eventually gets back in control as the active Adeos domain. If the > starvation did not last beyond Linux's robustness to such event, then > the kernel will catch up with the pending ticks and the system will > continue normally. IOW, it's not impossible to do lengthy real-time > processing that might delay/unsynchronize Linux ticks, and this might > work properly if some breathing time is left to the kernel, but you > cannot ask the real-time system to drop the determinism just for the > sake of allowing Linux to tick regularly. It's up to the application > designer to properly evaluate the real-time load which is going to be > bearable by the underlying architecture & kernel combo. > > In the particular case of multi-ms processing, I would likely suggest to > move it to a thread running in secondary mode without interrupt > shielding, so that Linux asynchronous activities such as interrupt > handling would still be possible, at the expense of a lesser execution > time predictability of such processing though. > > >> >>I tried to run a test on Xenomai-2.1.0 on Blackfin. This test looks like: >> > > > <snip> > > >>+++++++++ end test +++++++++++++++++ >> >> From the test result, " 23: BFIN Timer Tick", changed from "33531" to >>"33732", that is "201 * 10 = 2010 ms". And the "up time" is changed >>from "335.41 to 337.42", although in fact that "2 + 6 = 8 sec" has >>passed. >> > > > You may want to make your measurement thread sleep() for a while before > looking at the final tick counter; this would make sure that the IRQ > threads have been given enough time to catch up and process all pending > ticks they have in their log. Btw, did you activate CONFIG_PREEMPT? >
Er, sorry. There's no CONFIG_PREEMPT on Blackfin yet. -- Philippe. _______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
