All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
@ 2008-02-29 16:54 Anders Blomdell
  2008-02-29 17:58 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 13+ messages in thread
From: Anders Blomdell @ 2008-02-29 16:54 UTC (permalink / raw)
  To: xenomai-help

Hi,

with xenomai 2.4.1 my call to:

  rt_cond_wait(&cond, &mutex, 1000);

doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
due to CONFIG_NO_HZ=y, or have I misunderstood something?

Regards

Anders Blomdell

-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-02-29 16:54 [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1) Anders Blomdell
@ 2008-02-29 17:58 ` Gilles Chanteperdrix
  2008-03-03 10:30   ` Anders Blomdell
  0 siblings, 1 reply; 13+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-29 17:58 UTC (permalink / raw)
  To: Anders Blomdell; +Cc: xenomai-help

On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
<anders.blomdell@domain.hid> wrote:
> Hi,
>
>  with xenomai 2.4.1 my call to:
>
>   rt_cond_wait(&cond, &mutex, 1000);
>
>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>  due to CONFIG_NO_HZ=y, or have I misunderstood something?

What is your system timer setting ? Are you running in periodic or
aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
so rt_cond_wait should return instantaneously.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-02-29 17:58 ` Gilles Chanteperdrix
@ 2008-03-03 10:30   ` Anders Blomdell
  2008-03-03 11:00     ` Philippe Gerum
  0 siblings, 1 reply; 13+ messages in thread
From: Anders Blomdell @ 2008-03-03 10:30 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-help

Gilles Chanteperdrix wrote:
> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
> <anders.blomdell@domain.hid> wrote:
>> Hi,
>>
>>  with xenomai 2.4.1 my call to:
>>
>>   rt_cond_wait(&cond, &mutex, 1000);
>>
>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
> 
> What is your system timer setting ? Are you running in periodic or
> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
> so rt_cond_wait should return instantaneously.
OK, here comes a simplified program that just outputs A, and then hangs.

#include <sys/mman.h>
#include <native/cond.h>
#include <native/mutex.h>
#include <native/task.h>
#include <native/timer.h>

int main(int argc, char *argv[])
{
  RT_MUTEX mutex;
  RT_COND cond;
  RT_TASK task_main;

  mlockall(MCL_CURRENT|MCL_FUTURE);

  rt_task_shadow(&task_main, "main", 1, T_FPU);
  if (rt_mutex_create(&mutex, NULL)) {
    fprintf(stderr, "Failed to create mutex\n");
    exit(1);
  }
  if (rt_cond_create (&cond, NULL)) {
    fprintf(stderr, "Failed to create condition\n");
    exit(1);
  }

  if (rt_timer_set_mode(TM_ONESHOT)) {
    fprintf(stderr, "Failed to set timer mode\n");
    exit(1);
  }

  rt_mutex_acquire(&mutex, TM_INFINITE);
  printf("A\n");
  rt_cond_wait(&cond, &mutex, 1000);
  printf("B\n");
  rt_mutex_release(&mutex);
  exit(0);
}

Probaly something extremely simple I have overlooked (SIGH).

Regards

Anders


-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 10:30   ` Anders Blomdell
@ 2008-03-03 11:00     ` Philippe Gerum
  2008-03-03 11:08       ` Anders Blomdell
  0 siblings, 1 reply; 13+ messages in thread
From: Philippe Gerum @ 2008-03-03 11:00 UTC (permalink / raw)
  To: Anders Blomdell; +Cc: xenomai-help

Anders Blomdell wrote:
> Gilles Chanteperdrix wrote:
>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>> <anders.blomdell@domain.hid> wrote:
>>> Hi,
>>>
>>>  with xenomai 2.4.1 my call to:
>>>
>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>
>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>> What is your system timer setting ? Are you running in periodic or
>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>> so rt_cond_wait should return instantaneously.
> OK, here comes a simplified program that just outputs A, and then hangs.
>

I can't reproduce this issue with your test code here, but this might be
the sign of some timer race depending on how fast is the hw.

By hanging, I assume the box is still ok, right?
If so, could you please send the output of /proc/xenomai/stat,
/proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?

TIA,

-- 
Philippe.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:00     ` Philippe Gerum
@ 2008-03-03 11:08       ` Anders Blomdell
  2008-03-03 11:22         ` Philippe Gerum
  0 siblings, 1 reply; 13+ messages in thread
From: Anders Blomdell @ 2008-03-03 11:08 UTC (permalink / raw)
  To: philippe.gerum; +Cc: xenomai-help

Philippe Gerum wrote:
> Anders Blomdell wrote:
>> Gilles Chanteperdrix wrote:
>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>> <anders.blomdell@domain.hid> wrote:
>>>> Hi,
>>>>
>>>>  with xenomai 2.4.1 my call to:
>>>>
>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>
>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>> What is your system timer setting ? Are you running in periodic or
>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>> so rt_cond_wait should return instantaneously.
>> OK, here comes a simplified program that just outputs A, and then hangs.
>>
> 
> I can't reproduce this issue with your test code here, but this might be
> the sign of some timer race depending on how fast is the hw.
> 
> By hanging, I assume the box is still ok, right?
> If so, could you please send the output of /proc/xenomai/stat,
> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
> 
> TIA,
> 
> cat /proc/xenomai/stat
CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
  0  0      0          108606586  0     00500080  100.0  ROOT/0
  0  0      0          54113426   0     00000082    0.0  rtnet-stack
  0  0      0          1          0     00000082    0.0  rtnet-rtpc
  0  22291  2          3          0     00300186    0.0  main
  0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
  0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]

> cat /proc/xenomai/sched
CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
  0  0       -1      0          0          master    R          ROOT/0
  0  0       98      0          0          master    W          rtnet-stack
  0  0        0      0          0          master    W          rtnet-rtpc
  0  22291    1      0          0          master    w          main

> cat /proc/xenomai/timer
status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc

> cat /proc/xenomai/timerstat/master
CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
0    1049107334  506070537   324149     -          NULL         [host-timer/0]
0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
0    1           1           -          -          xnthread_ti  main


-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:08       ` Anders Blomdell
@ 2008-03-03 11:22         ` Philippe Gerum
  2008-03-03 11:26           ` Anders Blomdell
  2008-03-03 12:12           ` Anders Blomdell
  0 siblings, 2 replies; 13+ messages in thread
From: Philippe Gerum @ 2008-03-03 11:22 UTC (permalink / raw)
  To: Anders Blomdell; +Cc: xenomai-help

Anders Blomdell wrote:
> Philippe Gerum wrote:
>> Anders Blomdell wrote:
>>> Gilles Chanteperdrix wrote:
>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>>> <anders.blomdell@domain.hid> wrote:
>>>>> Hi,
>>>>>
>>>>>  with xenomai 2.4.1 my call to:
>>>>>
>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>>
>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>>> What is your system timer setting ? Are you running in periodic or
>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>>> so rt_cond_wait should return instantaneously.
>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>>
>> I can't reproduce this issue with your test code here, but this might be
>> the sign of some timer race depending on how fast is the hw.
>>
>> By hanging, I assume the box is still ok, right?
>> If so, could you please send the output of /proc/xenomai/stat,
>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>
>> TIA,
>>
>> cat /proc/xenomai/stat
> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>   0  22291  2          3          0     00300186    0.0  main
>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
> 
>> cat /proc/xenomai/sched
> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>   0  0       -1      0          0          master    R          ROOT/0
>   0  0       98      0          0          master    W          rtnet-stack
>   0  0        0      0          0          master    W          rtnet-rtpc
>   0  22291    1      0          0          master    w          main
> 
>> cat /proc/xenomai/timer
> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
> 
>> cat /proc/xenomai/timerstat/master
> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
> 0    1           1           -          -          xnthread_ti  main
> 
> 

Thanks. It looks like the timer did tick but the wakeup event was
missed. The thread is still waiting for it (stat xxxxxxx6 means
delayed+pending, which is the mode rt_cond_wait() sets for the thread).
We do have a problem, it seems.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:22         ` Philippe Gerum
@ 2008-03-03 11:26           ` Anders Blomdell
  2008-03-03 11:43             ` Jan Kiszka
  2008-03-03 12:48             ` Philippe Gerum
  2008-03-03 12:12           ` Anders Blomdell
  1 sibling, 2 replies; 13+ messages in thread
From: Anders Blomdell @ 2008-03-03 11:26 UTC (permalink / raw)
  To: philippe.gerum; +Cc: xenomai-help

Philippe Gerum wrote:
> Anders Blomdell wrote:
>> Philippe Gerum wrote:
>>> Anders Blomdell wrote:
>>>> Gilles Chanteperdrix wrote:
>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>>>> <anders.blomdell@domain.hid> wrote:
>>>>>> Hi,
>>>>>>
>>>>>>  with xenomai 2.4.1 my call to:
>>>>>>
>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>>>
>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>>>> What is your system timer setting ? Are you running in periodic or
>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>>>> so rt_cond_wait should return instantaneously.
>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>>>
>>> I can't reproduce this issue with your test code here, but this might be
>>> the sign of some timer race depending on how fast is the hw.
>>>
>>> By hanging, I assume the box is still ok, right?
>>> If so, could you please send the output of /proc/xenomai/stat,
>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>>
>>> TIA,
>>>
>>> cat /proc/xenomai/stat
>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>   0  22291  2          3          0     00300186    0.0  main
>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>
>>> cat /proc/xenomai/sched
>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>   0  0       -1      0          0          master    R          ROOT/0
>>   0  0       98      0          0          master    W          rtnet-stack
>>   0  0        0      0          0          master    W          rtnet-rtpc
>>   0  22291    1      0          0          master    w          main
>>
>>> cat /proc/xenomai/timer
>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>
>>> cat /proc/xenomai/timerstat/master
>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>> 0    1           1           -          -          xnthread_ti  main
>>
>>
> 
> Thanks. It looks like the timer did tick but the wakeup event was
> missed. The thread is still waiting for it (stat xxxxxxx6 means
> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
> We do have a problem, it seems.
> 
OK, what can I do to be of assistance?

/Anders

-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:26           ` Anders Blomdell
@ 2008-03-03 11:43             ` Jan Kiszka
  2008-03-03 12:48             ` Philippe Gerum
  1 sibling, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2008-03-03 11:43 UTC (permalink / raw)
  To: Anders Blomdell; +Cc: xenomai-help

Anders Blomdell wrote:
> Philippe Gerum wrote:
>> Anders Blomdell wrote:
>>> Philippe Gerum wrote:
>>>> Anders Blomdell wrote:
>>>>> Gilles Chanteperdrix wrote:
>>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>>>>> <anders.blomdell@domain.hid> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>>  with xenomai 2.4.1 my call to:
>>>>>>>
>>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>>>>
>>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>>>>> What is your system timer setting ? Are you running in periodic or
>>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>>>>> so rt_cond_wait should return instantaneously.
>>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>>>>
>>>> I can't reproduce this issue with your test code here, but this might be
>>>> the sign of some timer race depending on how fast is the hw.
>>>>
>>>> By hanging, I assume the box is still ok, right?
>>>> If so, could you please send the output of /proc/xenomai/stat,
>>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>>>
>>>> TIA,
>>>>
>>>> cat /proc/xenomai/stat
>>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>>   0  22291  2          3          0     00300186    0.0  main
>>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>>
>>>> cat /proc/xenomai/sched
>>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>>   0  0       -1      0          0          master    R          ROOT/0
>>>   0  0       98      0          0          master    W          rtnet-stack
>>>   0  0        0      0          0          master    W          rtnet-rtpc
>>>   0  22291    1      0          0          master    w          main
>>>
>>>> cat /proc/xenomai/timer
>>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>>
>>>> cat /proc/xenomai/timerstat/master
>>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>>> 0    1           1           -          -          xnthread_ti  main
>>>
>>>
>> Thanks. It looks like the timer did tick but the wakeup event was
>> missed. The thread is still waiting for it (stat xxxxxxx6 means
>> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
>> We do have a problem, it seems.
>>
> OK, what can I do to be of assistance?

Turn on the ipipe tracer (kernel config), tune it
(/proc/ipipe/trace/post_trace_points to, say, 1000), let it triger on
rt_cond_wait (echo rt_cond_wait > /proc/ipipe/trace/trigger), and fire
up your test. The result will be in /proc/ipipe/trace/frozen.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:22         ` Philippe Gerum
  2008-03-03 11:26           ` Anders Blomdell
@ 2008-03-03 12:12           ` Anders Blomdell
  1 sibling, 0 replies; 13+ messages in thread
From: Anders Blomdell @ 2008-03-03 12:12 UTC (permalink / raw)
  To: philippe.gerum; +Cc: xenomai-help

Philippe Gerum wrote:
> Anders Blomdell wrote:
>> Philippe Gerum wrote:
>>> Anders Blomdell wrote:
>>>> Gilles Chanteperdrix wrote:
>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>>>> <anders.blomdell@domain.hid> wrote:
>>>>>> Hi,
>>>>>>
>>>>>>  with xenomai 2.4.1 my call to:
>>>>>>
>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>>>
>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>>>> What is your system timer setting ? Are you running in periodic or
>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>>>> so rt_cond_wait should return instantaneously.
>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>>>
>>> I can't reproduce this issue with your test code here, but this might be
>>> the sign of some timer race depending on how fast is the hw.
>>>
>>> By hanging, I assume the box is still ok, right?
>>> If so, could you please send the output of /proc/xenomai/stat,
>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>>
>>> TIA,
>>>
>>> cat /proc/xenomai/stat
>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>   0  22291  2          3          0     00300186    0.0  main
>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>
>>> cat /proc/xenomai/sched
>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>   0  0       -1      0          0          master    R          ROOT/0
>>   0  0       98      0          0          master    W          rtnet-stack
>>   0  0        0      0          0          master    W          rtnet-rtpc
>>   0  22291    1      0          0          master    w          main
>>
>>> cat /proc/xenomai/timer
>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>
>>> cat /proc/xenomai/timerstat/master
>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>> 0    1           1           -          -          xnthread_ti  main
>>
>>
> 
> Thanks. It looks like the timer did tick but the wakeup event was
> missed. The thread is still waiting for it (stat xxxxxxx6 means
> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
> We do have a problem, it seems.
> 
Rebooting solved the problem this time (is this a Windows compatibility feature? :-)

Regards

Anders


-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 11:26           ` Anders Blomdell
  2008-03-03 11:43             ` Jan Kiszka
@ 2008-03-03 12:48             ` Philippe Gerum
  2008-03-03 13:27               ` Gilles Chanteperdrix
  1 sibling, 1 reply; 13+ messages in thread
From: Philippe Gerum @ 2008-03-03 12:48 UTC (permalink / raw)
  To: Anders Blomdell; +Cc: xenomai-help

Anders Blomdell wrote:
> Philippe Gerum wrote:
>> Anders Blomdell wrote:
>>> Philippe Gerum wrote:
>>>> Anders Blomdell wrote:
>>>>> Gilles Chanteperdrix wrote:
>>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>>>>> <anders.blomdell@domain.hid> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>>  with xenomai 2.4.1 my call to:
>>>>>>>
>>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>>>>>>
>>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>>>>> What is your system timer setting ? Are you running in periodic or
>>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>>>>> so rt_cond_wait should return instantaneously.
>>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>>>>
>>>> I can't reproduce this issue with your test code here, but this might be
>>>> the sign of some timer race depending on how fast is the hw.
>>>>
>>>> By hanging, I assume the box is still ok, right?
>>>> If so, could you please send the output of /proc/xenomai/stat,
>>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>>>
>>>> TIA,
>>>>
>>>> cat /proc/xenomai/stat
>>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>>   0  22291  2          3          0     00300186    0.0  main
>>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>>
>>>> cat /proc/xenomai/sched
>>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>>   0  0       -1      0          0          master    R          ROOT/0
>>>   0  0       98      0          0          master    W          rtnet-stack
>>>   0  0        0      0          0          master    W          rtnet-rtpc
>>>   0  22291    1      0          0          master    w          main
>>>
>>>> cat /proc/xenomai/timer
>>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>>
>>>> cat /proc/xenomai/timerstat/master
>>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>>> 0    1           1           -          -          xnthread_ti  main
>>>
>>>
>> Thanks. It looks like the timer did tick but the wakeup event was
>> missed. The thread is still waiting for it (stat xxxxxxx6 means
>> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
>> We do have a problem, it seems.
>>
> OK, what can I do to be of assistance?
> 

Are you running the application over GDB?

-- 
Philippe.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 12:48             ` Philippe Gerum
@ 2008-03-03 13:27               ` Gilles Chanteperdrix
  2008-03-03 13:52                 ` Philippe Gerum
  2008-03-03 16:02                 ` Anders Blomdell
  0 siblings, 2 replies; 13+ messages in thread
From: Gilles Chanteperdrix @ 2008-03-03 13:27 UTC (permalink / raw)
  To: philippe.gerum; +Cc: xenomai-help

On Mon, Mar 3, 2008 at 1:48 PM, Philippe Gerum <philippe.gerum@domain.hid> wrote:
>
> Anders Blomdell wrote:
>  > Philippe Gerum wrote:
>  >> Anders Blomdell wrote:
>  >>> Philippe Gerum wrote:
>  >>>> Anders Blomdell wrote:
>  >>>>> Gilles Chanteperdrix wrote:
>  >>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>  >>>>>> <anders.blomdell@domain.hid> wrote:
>  >>>>>>> Hi,
>  >>>>>>>
>  >>>>>>>  with xenomai 2.4.1 my call to:
>  >>>>>>>
>  >>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>  >>>>>>>
>  >>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>  >>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>  >>>>>> What is your system timer setting ? Are you running in periodic or
>  >>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>  >>>>>> so rt_cond_wait should return instantaneously.
>  >>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>  >>>>>
>  >>>> I can't reproduce this issue with your test code here, but this might be
>  >>>> the sign of some timer race depending on how fast is the hw.
>  >>>>
>  >>>> By hanging, I assume the box is still ok, right?
>  >>>> If so, could you please send the output of /proc/xenomai/stat,
>  >>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>  >>>>
>  >>>> TIA,
>  >>>>
>  >>>> cat /proc/xenomai/stat
>  >>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>  >>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>  >>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>  >>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>  >>>   0  22291  2          3          0     00300186    0.0  main
>  >>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>  >>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>  >>>
>  >>>> cat /proc/xenomai/sched
>  >>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>  >>>   0  0       -1      0          0          master    R          ROOT/0
>  >>>   0  0       98      0          0          master    W          rtnet-stack
>  >>>   0  0        0      0          0          master    W          rtnet-rtpc
>  >>>   0  22291    1      0          0          master    w          main
>  >>>
>  >>>> cat /proc/xenomai/timer
>  >>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>  >>>
>  >>>> cat /proc/xenomai/timerstat/master
>  >>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>  >>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>  >>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>  >>> 0    1           1           -          -          xnthread_ti  main
>  >>>
>  >>>
>  >> Thanks. It looks like the timer did tick but the wakeup event was
>  >> missed. The thread is still waiting for it (stat xxxxxxx6 means
>  >> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
>  >> We do have a problem, it seems.
>  >>
>  > OK, what can I do to be of assistance?
>  >
>
>  Are you running the application over GDB?

Cannot this be that the constant (3) used in rthal_timer_program_shot
is a bit too small ?

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 13:27               ` Gilles Chanteperdrix
@ 2008-03-03 13:52                 ` Philippe Gerum
  2008-03-03 16:02                 ` Anders Blomdell
  1 sibling, 0 replies; 13+ messages in thread
From: Philippe Gerum @ 2008-03-03 13:52 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-help

Gilles Chanteperdrix wrote:
> On Mon, Mar 3, 2008 at 1:48 PM, Philippe Gerum <philippe.gerum@domain.hid> wrote:
>> Anders Blomdell wrote:
>>  > Philippe Gerum wrote:
>>  >> Anders Blomdell wrote:
>>  >>> Philippe Gerum wrote:
>>  >>>> Anders Blomdell wrote:
>>  >>>>> Gilles Chanteperdrix wrote:
>>  >>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>  >>>>>> <anders.blomdell@domain.hid> wrote:
>>  >>>>>>> Hi,
>>  >>>>>>>
>>  >>>>>>>  with xenomai 2.4.1 my call to:
>>  >>>>>>>
>>  >>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>  >>>>>>>
>>  >>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>  >>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>  >>>>>> What is your system timer setting ? Are you running in periodic or
>>  >>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>  >>>>>> so rt_cond_wait should return instantaneously.
>>  >>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>  >>>>>
>>  >>>> I can't reproduce this issue with your test code here, but this might be
>>  >>>> the sign of some timer race depending on how fast is the hw.
>>  >>>>
>>  >>>> By hanging, I assume the box is still ok, right?
>>  >>>> If so, could you please send the output of /proc/xenomai/stat,
>>  >>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>  >>>>
>>  >>>> TIA,
>>  >>>>
>>  >>>> cat /proc/xenomai/stat
>>  >>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>  >>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>  >>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>  >>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>  >>>   0  22291  2          3          0     00300186    0.0  main
>>  >>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>  >>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>  >>>
>>  >>>> cat /proc/xenomai/sched
>>  >>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>  >>>   0  0       -1      0          0          master    R          ROOT/0
>>  >>>   0  0       98      0          0          master    W          rtnet-stack
>>  >>>   0  0        0      0          0          master    W          rtnet-rtpc
>>  >>>   0  22291    1      0          0          master    w          main
>>  >>>
>>  >>>> cat /proc/xenomai/timer
>>  >>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>  >>>
>>  >>>> cat /proc/xenomai/timerstat/master
>>  >>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>>  >>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>>  >>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>>  >>> 0    1           1           -          -          xnthread_ti  main
>>  >>>
>>  >>>
>>  >> Thanks. It looks like the timer did tick but the wakeup event was
>>  >> missed. The thread is still waiting for it (stat xxxxxxx6 means
>>  >> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
>>  >> We do have a problem, it seems.
>>  >>
>>  > OK, what can I do to be of assistance?
>>  >
>>
>>  Are you running the application over GDB?
> 
> Cannot this be that the constant (3) used in rthal_timer_program_shot
> is a bit too small ?
> 

It indeed seems that the default calibration has been overridden using a
zero value, but the timer object does elapse, so it is unlikely that a
bad programming prevented the LAPIC from firing this shot. Looking at
the thread timeout field, it also seems to confirm this, since a zero
return means that the timer is inactive, i.e. it has been dequeued after
the tick was processed.

This said, maybe we could try raising the default calibration
dynamically to 1 us (> /proc/xenomai/latency), so that the I-pipe would
be asked to handle the job directly for any earlier shot. Any change in
behaviour would give us a hint about what goes wrong.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1)
  2008-03-03 13:27               ` Gilles Chanteperdrix
  2008-03-03 13:52                 ` Philippe Gerum
@ 2008-03-03 16:02                 ` Anders Blomdell
  1 sibling, 0 replies; 13+ messages in thread
From: Anders Blomdell @ 2008-03-03 16:02 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-help

Gilles Chanteperdrix wrote:
> On Mon, Mar 3, 2008 at 1:48 PM, Philippe Gerum <philippe.gerum@domain.hid> wrote:
>> Anders Blomdell wrote:
>>  > Philippe Gerum wrote:
>>  >> Anders Blomdell wrote:
>>  >>> Philippe Gerum wrote:
>>  >>>> Anders Blomdell wrote:
>>  >>>>> Gilles Chanteperdrix wrote:
>>  >>>>>> On Fri, Feb 29, 2008 at 5:54 PM, Anders Blomdell
>>  >>>>>> <anders.blomdell@domain.hid> wrote:
>>  >>>>>>> Hi,
>>  >>>>>>>
>>  >>>>>>>  with xenomai 2.4.1 my call to:
>>  >>>>>>>
>>  >>>>>>>   rt_cond_wait(&cond, &mutex, 1000);
>>  >>>>>>>
>>  >>>>>>>  doesn't timeout (signalling works OK). Kernel version is 2.6.23.12, can it be
>>  >>>>>>>  due to CONFIG_NO_HZ=y, or have I misunderstood something?
>>  >>>>>> What is your system timer setting ? Are you running in periodic or
>>  >>>>>> aperiodic mode ? If aperiodic, 1000 ticks means 1000 ns, that is 1us,
>>  >>>>>> so rt_cond_wait should return instantaneously.
>>  >>>>> OK, here comes a simplified program that just outputs A, and then hangs.
>>  >>>>>
>>  >>>> I can't reproduce this issue with your test code here, but this might be
>>  >>>> the sign of some timer race depending on how fast is the hw.
>>  >>>>
>>  >>>> By hanging, I assume the box is still ok, right?
>>  >>>> If so, could you please send the output of /proc/xenomai/stat,
>>  >>>> /proc/xenomai/sched, /proc/xenomai/timer and /proc/xenomai/timerstat/master?
>>  >>>>
>>  >>>> TIA,
>>  >>>>
>>  >>>> cat /proc/xenomai/stat
>>  >>> CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
>>  >>>   0  0      0          108606586  0     00500080  100.0  ROOT/0
>>  >>>   0  0      0          54113426   0     00000082    0.0  rtnet-stack
>>  >>>   0  0      0          1          0     00000082    0.0  rtnet-rtpc
>>  >>>   0  22291  2          3          0     00300186    0.0  main
>>  >>>   0  0      0          107816863  0     00000000    0.0  IRQ22: rt_eepro100
>>  >>>   0  0      0          617309219  0     00000000    0.0  IRQ233: [timer]
>>  >>>
>>  >>>> cat /proc/xenomai/sched
>>  >>> CPU  PID    PRI      PERIOD     TIMEOUT    TIMEBASE  STAT       NAME
>>  >>>   0  0       -1      0          0          master    R          ROOT/0
>>  >>>   0  0       98      0          0          master    W          rtnet-stack
>>  >>>   0  0        0      0          0          master    W          rtnet-rtpc
>>  >>>   0  22291    1      0          0          master    w          main
>>  >>>
>>  >>>> cat /proc/xenomai/timer
>>  >>> status=on+watchdog:setup=0:clock=8061167744254256:timerdev=lapic:clockdev=tsc
>>  >>>
>>  >>>> cat /proc/xenomai/timerstat/master
>>  >>> CPU  SCHEDULED   FIRED       TIMEOUT    INTERVAL   HANDLER      NAME
>>  >>> 0    1049107334  506070537   324149     -          NULL         [host-timer/0]
>>  >>> 0    3358790     3358789     662553305  1000000000  xnpod_watch  [watchdog]
>>  >>> 0    1           1           -          -          xnthread_ti  main
>>  >>>
>>  >>>
>>  >> Thanks. It looks like the timer did tick but the wakeup event was
>>  >> missed. The thread is still waiting for it (stat xxxxxxx6 means
>>  >> delayed+pending, which is the mode rt_cond_wait() sets for the thread).
>>  >> We do have a problem, it seems.
>>  >>
>>  > OK, what can I do to be of assistance?
>>  >
>>
>>  Are you running the application over GDB?
> 
> Cannot this be that the constant (3) used in rthal_timer_program_shot
> is a bit too small ?
Some more info:

The problem is somewhat repeatable, running the following program sometimes
brings back the problem. I'm beginning to think that the problem is that
'rt_task_delete(NULL);' doesn't release all thread resources (i.e. memory usage
grows continually [(i = 4999) => VmSize:   342504 kB). What have I misunderstood
about task deletion?

#include <sys/mman.h>
#include <native/cond.h>
#include <native/mutex.h>
#include <native/task.h>
#include <native/timer.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


static void suicide(void *arg)
{
  printf("Suicide\n");
  rt_task_delete(NULL);
}

int main(int argc, char *argv[])
{
  RT_MUTEX mutex;
  RT_TASK task_main;
  RT_TASK task;
  RT_COND cond;
  int i;

  mlockall(MCL_CURRENT|MCL_FUTURE);

  rt_task_shadow(&task_main, "main", 1, T_FPU);
  if (rt_mutex_create(&mutex, NULL)) {
    fprintf(stderr, "Failed to create mutex\n");
    exit(1);
  }
  if (rt_cond_create (&cond, NULL)) {
    fprintf(stderr, "Failed to create condition\n");
    exit(1);
  }

  if (rt_timer_set_mode(TM_ONESHOT)) {
    fprintf(stderr, "Failed to set timer mode\n");
    exit(1);
  }

  for  (i = 0 ; i < 5000 ; i++) {
    if (i % 100 == 99) {
      int fd, N;

      char buf[1000];
      fd = open("/proc/self/status", O_RDONLY);
      while ((N = read(fd, buf, 1000)) > 0) {
        write(1, buf, N);
      }
      close(fd);
    }

    if (rt_task_create(&task, NULL, 0, 1, 0)) {
      fprintf(stderr, "Failed to create  task\n");
      exit(1);
    }
    if (rt_task_start(&task, &suicide, NULL)) {
      fprintf(stderr, "Failed to start task\n");
      exit(1);
    }
    rt_mutex_acquire(&mutex, TM_INFINITE);
    printf("i = %d\n", i);
    rt_cond_wait(&cond, &mutex, 5000000);
    printf("wait done\n");
    rt_mutex_release(&mutex);
  }
  exit(0);
}


Regards

/Anders


-- 
Anders Blomdell                  Email: anders.blomdell@domain.hid
Department of Automatic Control
Lund University                  Phone:    +46 46 222 4625
P.O. Box 118                     Fax:      +46 46 138118
SE-221 00 Lund, Sweden


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2008-03-03 16:02 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-29 16:54 [Xenomai-help] rt_cond_wait doesn't timeout (xenomai 2.4.1) Anders Blomdell
2008-02-29 17:58 ` Gilles Chanteperdrix
2008-03-03 10:30   ` Anders Blomdell
2008-03-03 11:00     ` Philippe Gerum
2008-03-03 11:08       ` Anders Blomdell
2008-03-03 11:22         ` Philippe Gerum
2008-03-03 11:26           ` Anders Blomdell
2008-03-03 11:43             ` Jan Kiszka
2008-03-03 12:48             ` Philippe Gerum
2008-03-03 13:27               ` Gilles Chanteperdrix
2008-03-03 13:52                 ` Philippe Gerum
2008-03-03 16:02                 ` Anders Blomdell
2008-03-03 12:12           ` Anders Blomdell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.