Andreas Glatz wrote: > On Thu, Apr 15, 2010 at 08:40:00AM -0400, Gilles Chanteperdrix wrote: >> Andreas Glatz wrote: >>> Hi, >>> >>> On Thu, Apr 15, 2010 at 06:46:58AM -0400, Philippe Gerum wrote: >>>> On Wed, 2010-04-14 at 20:19 -0400, Andreas Glatz wrote: >>>> >>>>> One thing I've noticed though, and this is not related to the patch (I >>>>> verified it on a >>>>> vanilla Xenomai system): Consider the example I included. It prints >>>>> average cycle times >>>>> and the cycle time variance of the high priority task ("T2"). I noticed a >>>>> big difference >>>>> in the cycle time variance when switching the first task ("T1") to >>>>> secondary mode with >>>>> rt_task_set_mode() and setting the scheduler policy to either SCHED_FIFO, >>>>> SCHED_IDLE or >>>>> SCHED_NORMAL. I'm assuming someone asked this before and I didn't pay >>>>> attention :) >>>>> Can someone give me a short explanation or point me somewhere to get an >>>>> explanation for >>>>> this behaviour? I didn't expect such a difference in variance: >>>>> >>>> Moving back to secondary mode is nothing more than triggering the >>>> rescheduling procedure linux-wise, so the time credit for >>>> SCHED_OTHER/IDLE tasks decay as usual during your work loop, preemption >>>> by high priority task is more likely and so on. This variance is just >>>> the sign that those tasks cannot ask for more than what their scheduling >>>> policy grants. >>>> >>> I think, I didn't express myself clearly enough. I was more puzzled about >>> the variance of the pure RT task (task w/o any secondary mode switches). >>> So it seems that changing the scheduling policy of the "relaxed" task has >>> an influence on the variance of the pure RT task. So the RT task seems >>> to wait for the "relaxed" task. But where exacly does it wait for it? >>> Mmmmm... >> When waiting for the mutex? >> > > Ok. Maybe it's as ovvious as that. But I'm not quite there yet. Let me > explain: > I know that the "relaxed" task ("T1") is in primary mode between > rt_mutex_aquire() > and rt_mutex_release(). In other words when the pure RT task ("T2") starts > waiting > on the mutex, "T1" should be primary mode and not be affected by the Linux > scheduling policy. After "T1" releases the mutex it switches back to > secondary mode. > So I would expect the variance to be constant.
Right. Maybe the problem is that the first call made by a thread to rt_printf causes a switch to secondary mode (auto mode, means that the first call to rt_printf calls malloc). You can confirm that by arming the T_WARNSW bit. -- Gilles. _______________________________________________ Xenomai-help mailing list Xenomai-help@gna.org https://mail.gna.org/listinfo/xenomai-help