From: Tom Evans <tom_usenet@optusnet.com.au>
To: Dan Egnor <dan.egnor@gmail.com>, linux-can@vger.kernel.org
Subject: Re: Fwd: Querying current tx_queue usage of a SocketCAN interface
Date: Thu, 02 Apr 2015 13:20:39 +1100 [thread overview]
Message-ID: <551CA777.8070208@optusnet.com.au> (raw)
In-Reply-To: <loom.20150402T022922-646@post.gmane.org>
On 02/04/15 11:33, Dan Egnor wrote:
> Tom Evans <tom_usenet <at> optusnet.com.au> writes:
>> As the "System Designer", if your system (your car) uses SJA1000
>> controllers, or other ones, but with software that doesn't support
>> the multiple hardware buffers, or has more IDs in use that the
>> number of buffers, they you have to design the *SYSTEM* so it
>> works within those constraints.
>
> That's all well and good, but what you're saying is that Linux SocketCAN is
> incapable of supporting anything but the most absolutely basic single-mailbox
> operation.
That's a restriction of the socket interface. It gives you a lot "for free" in
all the demultiplexing of receive data and the transmit FIFOs, but at a cost.
If you read this paper you'll see that you can use QDISC to implement priority
queues. That fixes MOST of the problems, but not all as the priority queues
don't connect through the driver to individual hardware transmit buffers. So
there's always going to be a "single pipe" somewhere in the system where
you'll get the priority inversion.
http://rtime.felk.cvut.cz/can/socketcan-qdisc-final.pdf
If you wanted a "perfect" solution you'd need a probably separate can drive
instance for each hardware buffer.
There's a lot of manual work and overhead setting up those priority queues.
There's nothing "automatic" about it.
> That seems surprisingly awful for something that's an established generic
> interface for all CAN hardware on this operating system! No matter how many
> mailboxes the controller might support, the operating system simply does not
> support prioritized transmission.
Generic and simple versus custom and complicated. Give me simple any day.
> This means that in our system architecture, Linux nodes must be treated as
> substantially less capable than most embedded controllers. (The TI MCUs we're
> using have 64 mailboxes, for example.)
Linux nodes are by definition a lot less capable. They're not "real time" for
a start, unless you want to use some "Real Time Linux" (Xenomai etc). But they
need the CAN drivers rewritten to support them (Xenomai anyway).
I had to seriously rewrite the FlexCAN drivers for our i.MX53 because the
Ethernet driver blocked the CAN driver for so long the CAN hardware receive
FIFO overflowed. Linux doesn't even support setting different interrupt
priorities on ARM (but my problem was with NAPI).
Even if you're running SMP and multicore with ARM, if the framebuffer driver
does a cache flush it can lock all cores out for L2 for a millisecond, that's
10 CAN messages at 1MHz:
http://www.arm.com/files/pdf/cachecoherencywhitepaper_6june2011.pdf
> This feels like a massive functional deficit that's acknowledged
> nowhere in the documentation. Is this really the case??
And everything else in Linux is "perfect"?
Tom
next prev parent reply other threads:[~2015-04-02 2:20 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAE+ymru296P+LjkT7_ONVc2OGMP9mtXW46Nq5aSnm1etauj9Aw@mail.gmail.com>
2015-03-28 20:26 ` Fwd: Querying current tx_queue usage of a SocketCAN interface Paarvai Naai
2015-03-29 22:42 ` Tom Evans
2015-03-30 21:55 ` Paarvai Naai
[not found] ` <5519E5A9.7080104@optusnet.com.au>
2015-03-31 0:26 ` Paarvai Naai
2015-03-31 3:09 ` Tom Evans
2015-04-01 20:33 ` Paarvai Naai
2015-04-01 20:57 ` Dan Egnor
2015-04-02 2:20 ` Tom Evans
2015-04-02 2:33 ` Daniel Egnor
2015-04-01 23:21 ` Tom Evans
2015-04-02 0:33 ` Dan Egnor
2015-04-02 2:20 ` Tom Evans [this message]
2015-04-02 6:28 ` Flexcan (was: Re: Fwd: Querying current tx_queue usage of a SocketCAN interface) Marc Kleine-Budde
2015-04-02 11:35 ` Tom Evans
2015-04-02 12:07 ` Flexcan Marc Kleine-Budde
2015-04-04 3:32 ` Flexcan (was: Re: Fwd: Querying current tx_queue usage of a SocketCAN interface) Tom Evans
2015-04-09 8:06 ` Flexcan Tom Evans
2015-04-10 6:35 ` Flexcan (was: Re: Fwd: Querying current tx_queue usage of a SocketCAN interface) Tom Evans
2015-04-02 18:23 ` Fwd: Querying current tx_queue usage of a SocketCAN interface Paarvai Naai
2015-04-02 6:46 ` Marc Kleine-Budde
2015-04-02 18:28 ` Paarvai Naai
2015-04-03 1:35 ` Tom Evans
2015-04-03 6:45 ` Paarvai Naai
2015-04-03 11:08 ` Marc Kleine-Budde
2015-04-03 15:24 ` Paarvai Naai
2015-04-03 20:28 ` Marc Kleine-Budde
2015-04-03 20:53 ` Paarvai Naai
2015-04-04 8:49 ` Marc Kleine-Budde
2015-04-06 17:54 ` Paarvai Naai
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=551CA777.8070208@optusnet.com.au \
--to=tom_usenet@optusnet.com.au \
--cc=dan.egnor@gmail.com \
--cc=linux-can@vger.kernel.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.