From: "Steve M. Robbins" <steve@sumost.ca>
To: Xenomai@xenomai.org
Subject: Re: [Xenomai] Message Pipe services behaviour
Date: Fri, 31 Oct 2014 15:00:07 -0500 [thread overview]
Message-ID: <20141031200007.GC378@sumost.ca> (raw)
In-Reply-To: <54512440.3000806@xenomai.org>
On Wed, Oct 29, 2014 at 06:30:40PM +0100, Philippe Gerum wrote:
> On 10/29/2014 05:11 PM, Steve M. Robbins wrote:
>
> > In the old FIFO-based code, we had a suspicion of the similar problem. Since
> > the linux process is not real time, we expect multiple messages to be waiting.
> > To avoid running through the select/read loop once for each message, our old
> > FIFO-based code opened the file in nonblocking mode and did a read into a buffer
> > that could hold up to 100 messages. We generally would read 5-7 at a time,
> > not 100, so this proved that the reader could keep up when reading in batches.
> >
> > Using this same technique with the /dev/rtpN end of a Message Pipe never reads
> > more than 1 message. I tried both blocking and non-blocking modes but got the
> > same result. So this is my main question: knowing that there are likely many
> > messages in the pipe, how do I read them in a batch?
> >
>
> Reading with O_NONBLOCK set on /dev/rtp should do the trick.
Great! I changed back to O_NONBLOCK (and verified on the running file
using /proc/pid/fdstats). And I'm using a private pool for the pipe.
> If it does
> not, this could mean that your rt side is filling up the pool too fast
> compared to the scheduling opportunities for the nrt side. The latter
> won't run until the rt activity becomes quiescent long enough.
>
> You can track how many bytes are readable on the nrt side by using
> ioctl(.., FIONREAD, &some_int), to make sure this value does increase
> over time until ENOMEM is received. Otherwise there must be a leak of
> consumed message buffers.
Good suggestion. I am now tracking the number of messages available
using the ioctl() just prior to read. In the most recent run, there
was an average of 83 messages available, but read() only obtained one.
That suggests to me that the nrt side is being scheduled often enough.
I can also see via /proc/xenomai/heap (thanks for the tip!) that the
heap does fill up, so ENOMEM is valid. When the message rate slows
down, the nrt side is able to catch up and the heap size comes back
down (and ENOMEM goes away).
The previous kernel FIFO-based code actually uses the same code on the
nrt side so I have a bit of confidence in that. With the FIFO code, I
can see from the ioctl() and read() that it does read all available
bytes. I'm really puzzled why the rt_pipe is behaving differently.
-Steve
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 173 bytes
Desc: Digital signature
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20141031/be1ecbbd/attachment.sig>
next prev parent reply other threads:[~2014-10-31 20:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-29 16:11 [Xenomai] Message Pipe services behaviour Steve M. Robbins
2014-10-29 17:30 ` Philippe Gerum
2014-10-31 20:00 ` Steve M. Robbins [this message]
2014-11-01 9:54 ` Philippe Gerum
2014-11-02 0:53 ` Steve M. Robbins
2014-11-03 8:18 ` Philippe Gerum
2014-11-03 15:59 ` Steve M. Robbins
2014-11-03 16:29 ` Philippe Gerum
2014-11-03 18:37 ` Steve M. Robbins
2014-11-03 20:01 ` Philippe Gerum
2014-11-03 20:03 ` Gilles Chanteperdrix
2014-11-03 20:18 ` Philippe Gerum
2014-11-03 22:22 ` Steve M. Robbins
2014-11-03 8:54 ` dietmar.schindler
2014-11-03 9:08 ` Philippe Gerum
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=20141031200007.GC378@sumost.ca \
--to=steve@sumost.ca \
--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.