All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@domain.hid>
To: Anders Blomdell <anders.blomdell@domain.hid>
Cc: "xenomai@xenomai.org" <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] Potential problem with rt_eepro100
Date: Wed, 03 Nov 2010 13:17:55 +0100	[thread overview]
Message-ID: <4CD152F3.4080203@domain.hid> (raw)
In-Reply-To: <4CD1509A.3000908@domain.hid>

Am 03.11.2010 13:07, Anders Blomdell wrote:
> On 2010-11-03 12.55, Jan Kiszka wrote:
>> Am 03.11.2010 12:50, Jan Kiszka wrote:
>>> Am 03.11.2010 12:44, Anders Blomdell wrote:
>>>> Anders Blomdell wrote:
>>>>> Jan Kiszka wrote:
>>>>>> Am 01.11.2010 17:55, Anders Blomdell wrote:
>>>>>>> Jan Kiszka wrote:
>>>>>>>> Am 28.10.2010 11:34, Anders Blomdell wrote:
>>>>>>>>> Jan Kiszka wrote:
>>>>>>>>>> Am 28.10.2010 09:34, Anders Blomdell wrote:
>>>>>>>>>>> Anders Blomdell wrote:
>>>>>>>>>>>> Anders Blomdell wrote:
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I'm trying to use rt_eepro100, for sending raw ethernet packets,
>>>>>>>>>>>>> but I'm
>>>>>>>>>>>>> experincing occasionally weird behaviour.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Versions of things:
>>>>>>>>>>>>>
>>>>>>>>>>>>>   linux-2.6.34.5
>>>>>>>>>>>>>   xenomai-2.5.5.2
>>>>>>>>>>>>>   rtnet-39f7fcf
>>>>>>>>>>>>>
>>>>>>>>>>>>> The testprogram runs on two computers with "Intel Corporation
>>>>>>>>>>>>> 82557/8/9/0/1 Ethernet Pro 100 (rev 08)" controller, where one
>>>>>>>>>>>>> computer
>>>>>>>>>>>>> acts as a mirror sending back packets received from the ethernet
>>>>>>>>>>>>> (only
>>>>>>>>>>>>> those two computers on the network), and the other sends
>>>>>>>>>>>>> packets and
>>>>>>>>>>>>> measures roundtrip time. Most packets comes back in approximately
>>>>>>>>>>>>> 100
>>>>>>>>>>>>> us, but occasionally the reception times out (once in about
>>>>>>>>>>>>> 100000
>>>>>>>>>>>>> packets or more), but the packets gets immediately received when
>>>>>>>>>>>>> reception is retried, which might indicate a race between
>>>>>>>>>>>>> rt_dev_recvmsg
>>>>>>>>>>>>> and interrupt, but I might miss something obvious.
>>>>>>>>>>>> Changing one of the ethernet cards to a "Intel Corporation 82541PI
>>>>>>>>>>>> Gigabit Ethernet Controller (rev 05)", while keeping everything
>>>>>>>>>>>> else
>>>>>>>>>>>> constant, changes behavior somewhat; after receiving a few 100000
>>>>>>>>>>>> packets, reception stops entirely (-EAGAIN is returned), while
>>>>>>>>>>>> transmission proceeds as it should (and mirror returns packets).
>>>>>>>>>>>>
>>>>>>>>>>>> Any suggestions on what to try?
>>>>>>>>>>> Since the problem disappears with 'maxcpus=1', I suspect I have
>>>>>>>>>>> a SMP
>>>>>>>>>>> issue (machine is a Core2 Quad), so I'll move to xenomai-core.
>>>>>>>>>>> (original message can be found at
>>>>>>>>>>> http://sourceforge.net/mailarchive/message.php?msg_name=4CC82C8D.3080808%40control.lth.se
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> )
>>>>>>>>>>>
>>>>>>>>>>> Xenomai-core gurus: which is the corrrect way to debug SMP issues?
>>>>>>>>>>> Can I run I-pipe-tracer and expect to be able save at least 150
>>>>>>>>>>> us of
>>>>>>>>>>> traces for all cpus? Any hints/suggestions/insigths are welcome...
>>>>>>>>>> The i-pipe tracer unfortunately only saves traces for a the CPU that
>>>>>>>>>> triggered the freeze. To have a full pictures, you may want to
>>>>>>>>>> try my
>>>>>>>>>> ftrace port I posted recently for 2.6.35.
>>>>>>>>> 2.6.35.7 ?
>>>>>>>>>
>>>>>>>> Exactly.
>>>>>>> Finally managed to get the ftrace to work
>>>>>>> (one possible bug: had to manually copy
>>>>>>> include/xenomai/trace/xn_nucleus.h to
>>>>>>> include/xenomai/trace/events/xn_nucleus.h), and it looks like it can be
>>>>>>> very useful...
>>>>>>>
>>>>>>> But I don't think it will give much info at the moment, since no
>>>>>>> xenomai/ipipe interrupt activity shows up, and adding that is far above
>>>>>>> my league :-(
>>>>>>
>>>>>> You could use the function tracer, provided you are able to stop the
>>>>>> trace quickly enough on error.
>>>>>>
>>>>>>> My current theory is that the problem occurs when something like this
>>>>>>> takes place:
>>>>>>>
>>>>>>>   CPU-i        CPU-j        CPU-k        CPU-l
>>>>>>>
>>>>>>> rt_dev_sendmsg
>>>>>>>         xmit_irq
>>>>>>> rt_dev_recvmsg            recv_irq
>>>>>>
>>>>>> Can't follow. When races here, and what will go wrong then?
>>>>> Thats the good question. Find attached:
>>>>>
>>>>> 1. .config (so you can check for stupid mistakes)
>>>>> 2. console log
>>>>> 3. latest version of test program
>>>>> 4. tail of ftrace dump
>>>>>
>>>>> These are the xenomai tasks running when the test program is active:
>>>>>
>>>>> CPU  PID    CLASS  PRI      TIMEOUT   TIMEBASE   STAT       NAME
>>>>>   0  0      idle    -1      -         master     R          ROOT/0
>>>>>   1  0      idle    -1      -         master     R          ROOT/1
>>>>>   2  0      idle    -1      -         master     R          ROOT/2
>>>>>   3  0      idle    -1      -         master     R          ROOT/3
>>>>>   0  0      rt      98      -         master     W          rtnet-stack
>>>>>   0  0      rt       0      -         master     W          rtnet-rtpc
>>>>>   0  29901  rt      50      -         master                raw_test
>>>>>   0  29906  rt       0      -         master     X          reporter
>>>>>
>>>>>
>>>>>
>>>>> The lines of interest from the trace are probably:
>>>>>
>>>>> [003]  2061.347855: xn_nucleus_thread_resume: thread=f9bf7b00   
>>>>>                   thread_name=rtnet-stack mask=2
>>>>> [003]  2061.347862: xn_nucleus_sched: status=2000000
>>>>> [000]  2061.347866: xn_nucleus_sched_remote: status=0
>>>>>
>>>>> since this is the only place where a packet gets delayed, and the only
>>>>> place in the trace where sched_remote reports a status=0
>>>> Since the cpu that has rtnet-stack and hence should be resumed is doing
>>>> heavy I/O at the time of fault; could it be that
>>>> send_ipi/schedule_handler needs barriers to make sure taht decisions are
>>>> made on the right status?
>>>
>>> That was my first idea as well - but we should run all relevant code
>>> under nklock here. But please correct me if I miss something.
> Wouldn't we need a write-barrier before the send_ipi regardless of what locks we
> hold, otherwise no guarantees that the memory write reaches the target cpu
> before the interrupt does?

Yeah, the problem is that if xnpod_resume_thread and the next
xnpod_reschedule are under the same nklock, we won't issue the barrier
as we won't release the lock! So there is indeed the need to issue an
additional barrier. Can you check this?

diff --git a/include/nucleus/sched.h b/include/nucleus/sched.h
index df56417..66b52ad 100644
--- a/include/nucleus/sched.h
+++ b/include/nucleus/sched.h
@@ -187,6 +187,7 @@ static inline int xnsched_self_resched_p(struct xnsched *sched)
   if (current_sched != (__sched__))	{				\
       xnarch_cpu_set(xnsched_cpu(__sched__), current_sched->resched);	\
       setbits((__sched__)->status, XNRESCHED);				\
+      xnarch_memory_barrier();						\
   }									\
 } while (0)
 

> 
>>
>> Mmmh -- not everything. The inlined XNRESCHED entry test in
>> xnpod_schedule runs outside nklock. But doesn't releasing nklock imply a
>> memory write barrier? Let me meditate...
> Wouldn't we need a read barrier then (but maybe the irq-handling takes care of
> that, not familiar with the code yet)?

A read barrier is not required here as we do not need to order load
operation /wrt each other in the reschedule IRQ handler.

> 
> Meditate all yo need. BTW: the ftrace stuff is great, I'm looking forward to be
> able to trace everything this way :-)

You can always help: there is a lot boring^Winteresting tracepoint
conversion waiting in Xenomai, see the few already converted nucleus
tracepoints.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux


  reply	other threads:[~2010-11-03 12:17 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4CC82C8D.3080808@domain.hid>
     [not found] ` <4CC84327.9070202@domain.hid>
2010-10-28  7:34   ` [Xenomai-core] [RTnet-users] Potential problem with rt_eepro100 Anders Blomdell
2010-10-28  7:40     ` Jan Kiszka
2010-10-28  9:34       ` Anders Blomdell
2010-10-28 10:18         ` Jan Kiszka
2010-10-28 13:02           ` [Xenomai-core] " Anders Blomdell
2010-10-28 15:05             ` Anders Blomdell
2010-10-28 15:09               ` Jan Kiszka
2010-10-28 15:18                 ` Anders Blomdell
2010-10-28 15:34                   ` Jan Kiszka
2010-10-29 17:42                     ` Anders Blomdell
2010-10-29 18:06                       ` Jan Kiszka
2010-10-29 19:29                         ` Anders Blomdell
2010-11-01 16:55           ` Anders Blomdell
2010-11-03  8:17             ` Jan Kiszka
2010-11-03 10:33               ` Anders Blomdell
2010-11-03 11:44                 ` Anders Blomdell
2010-11-03 11:50                   ` Jan Kiszka
2010-11-03 11:55                     ` Jan Kiszka
2010-11-03 12:07                       ` Anders Blomdell
2010-11-03 12:17                         ` Jan Kiszka [this message]
2010-11-03 13:40                           ` Anders Blomdell
2010-11-03 16:02                             ` Anders Blomdell
2010-11-03 16:46                               ` Anders Blomdell
2010-11-03 16:53                                 ` Jan Kiszka
2010-11-03 19:38                                   ` Anders Blomdell
2010-11-03 20:41                                     ` Philippe Gerum
2010-11-03 22:03                                       ` Jan Kiszka
2010-11-03 22:11                                         ` Jan Kiszka
2010-11-03 22:56                                           ` Jan Kiszka
2010-11-03 23:11                                             ` Gilles Chanteperdrix
2010-11-03 23:15                                               ` Jan Kiszka
2010-11-03 23:18                                                 ` Gilles Chanteperdrix
2010-11-03 23:41                                                   ` Jan Kiszka
2010-11-03 23:44                                                     ` Gilles Chanteperdrix
2010-11-03 23:49                                                       ` Jan Kiszka
2010-11-03 23:56                                                         ` Gilles Chanteperdrix
2010-11-04  0:06                                                           ` Jan Kiszka
2010-11-04  0:13                                                             ` Gilles Chanteperdrix
2010-11-04  7:30                                                               ` Jan Kiszka
2010-11-04  8:45                                                                 ` Anders Blomdell
2010-11-04  9:10                                                                   ` Jan Kiszka
2010-11-04  9:17                                                                   ` Gilles Chanteperdrix
2010-11-04  9:16                                                                 ` Gilles Chanteperdrix
2010-11-04  9:18                                                                   ` Gilles Chanteperdrix
2010-11-04  9:26                                                                   ` Jan Kiszka
2010-11-04  9:32                                                                     ` Jan Kiszka
2010-11-04 10:42                                                                       ` Anders Blomdell
2010-11-04 12:39                                                                       ` Gilles Chanteperdrix
2010-11-04 13:18                                                                         ` Anders Blomdell
2010-11-04 14:37                                                                           ` Jan Kiszka
2010-11-04 14:53                                                                             ` Anders Blomdell
2010-11-04 15:33                                                                               ` Jan Kiszka
2010-11-04 22:08                                                                                 ` Gilles Chanteperdrix
2010-11-04 23:10                                                                                   ` Jan Kiszka
2010-11-04 23:25                                                                                     ` Gilles Chanteperdrix
2010-11-04 23:32                                                                                       ` Jan Kiszka
2010-11-04 23:46                                                                                         ` Gilles Chanteperdrix
2010-11-05  0:09                                                                                           ` Jan Kiszka
2010-11-05  0:11                                                                                             ` Gilles Chanteperdrix
2010-11-05  1:35                                                                                           ` Gilles Chanteperdrix
2010-11-05  9:59                                                                                             ` Anders Blomdell
2010-11-04 22:06                                                                             ` Gilles Chanteperdrix
2010-11-04 23:17                                                                               ` Jan Kiszka
2010-11-04 23:24                                                                                 ` Gilles Chanteperdrix
2010-11-04 23:35                                                                                   ` Jan Kiszka
2010-11-05  1:28                                                                                     ` Gilles Chanteperdrix
2010-11-05 10:21                                                                                       ` Anders Blomdell
2010-11-06  0:27                                                                                         ` Gilles Chanteperdrix
2010-11-06 20:26                                                                                           ` Anders Blomdell
2010-11-06 20:37                                                                                             ` Gilles Chanteperdrix
2010-11-06 22:49                                                                                               ` Philippe Gerum
2010-11-07  1:00                                                                                                 ` Jan Kiszka
2010-11-07  8:31                                                                                                   ` Gilles Chanteperdrix
2010-11-07  9:46                                                                                                     ` Jan Kiszka
2010-11-07  9:57                                                                                                       ` Gilles Chanteperdrix
2010-11-07 10:00                                                                                                         ` Jan Kiszka
2010-11-07 10:03                                                                                                     ` Philippe Gerum
2010-11-07 10:08                                                                                                       ` Jan Kiszka
2010-11-07 10:12                                                                                                         ` Gilles Chanteperdrix
2010-11-07 10:14                                                                                                           ` Jan Kiszka
2010-11-07 10:49                                                                                                             ` Philippe Gerum
2010-11-07  9:46                                                                                                   ` Philippe Gerum
2010-11-11 15:46                                                                                                   ` Gilles Chanteperdrix
2010-11-12 15:36                                                                                                     ` Jan Kiszka
2010-11-13 18:31                                                                                                       ` Gilles Chanteperdrix

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CD152F3.4080203@domain.hid \
    --to=jan.kiszka@domain.hid \
    --cc=anders.blomdell@domain.hid \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.