All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian.Smolorz@gmx.de
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: xenomai@xenomai.org, Sam Daniel <daniel.jacob.samuel@gmail.com>
Subject: Re: Look up all IDDP/XDDP labels in the registry from userspace
Date: Tue, 26 Jan 2021 21:37:03 +0100	[thread overview]
Message-ID: <trinity-9fa294bb-7134-47d5-bdf8-79a42908c354-1611693422979@msvc-mesg-gmx120> (raw)
In-Reply-To: <10c180a0-4589-556e-1b1b-5b96f2fa382b@siemens.com>

Hi Jan,

Jan Kiszka wrote:
> On 26.01.21 20:44, Sam Daniel wrote:
> > On Tue, Jan 26, 2021 at 10:07 AM Jan Kiszka <jan.kiszka@siemens.com
> > <mailto:jan.kiszka@siemens.com>> wrote:
> > 
> >     On 25.01.21 22:07, Sam Daniel via Xenomai wrote:
> >     > On Mon, Jan 25, 2021 at 12:20 PM Sam Daniel
> >     <daniel.jacob.samuel@gmail.com <mailto:daniel.jacob.samuel@gmail.com>>
> >     > wrote:
> >     >
> >     >> Is it possible to look up from userspace code all of the
> >     IDDP/XDDP labels
> >     >> that exist in the registry without leaving the primary domain?
> >     >>
> >     >> I have tried a few different ways of reading the contents of
> >     >> /proc/xenomai/registry/rtipc/iddp. The inotify API causes mode
> >     switches (it
> >     >> relies on select or poll), not to mention that inotify does not
> >     work well
> >     >> with virtual filesystems. And using the C++ filesystem library to
> >     read the
> >     >> contents of the directory also causes mode switches (filesystem
> >     >> interactions).
> >     >>
> >     >> Is there a real-time API function that I can use to query these
> >     labels?
> >     >>
> >     >
> >     > C++ filesystem library is causing mode switches because of an mmap
> >     deep in
> >     > its call stack, not because of "filesystem interactions" like I
> >     initially
> >     > thought.
> >     >
> > 
> >     What is the use case you need label listing from RT context for?
> > 
> >     Jan
> > 
> >     -- 
> >     Siemens AG, T RDA IOT
> >     Corporate Competence Center Embedded Linux
> > 
> > 
> > My use case is an IDDP-based pub/sub messaging system for real-time threads.
> > 
> > Threads publish and subscribe to a channel ("xyz"). Any number of
> > threads can publish to any channel. And any number of threads can
> > subscribe to any channel (and each one should receive every message
> > published to that channel).
> > 
> > Subscribers bind labeled IDDP sockets for each channel using labels like
> > so: <channel name>-<thread name>. If three threads subscribe to channel
> > "xyz" then I would expect /proc/xenomai/registry/rtipc/iddp to show:
> > xyz-threadA -> 0
> > xyz-threadB -> 1
> > xyz-threadC -> 2
> > 
> > For the pub/sub implementation to work, when thread X calls
> > publish("xyz", &message) the publish method would need to multicast the
> > message to all three of the IDDP sockets above.
> > 
> > I would like to look up all labels in the registry from within the
> > publish method to check if any subscribers have gone away or if any new
> > subscribers have appeared and then adjust the multicast of the message
> > accordingly.
> 
> RTIPC is not designed for such use cases - no multicast support as you
> may have noticed already. Polling for labels to appear or disappear
> would be a poor man's workaround. Still, you could make it "work": poll
> with a non-RT thread for registry changes, update a lock-protected list
> of subscribers, and use that list from the publish method in RT context.
> 
> That reminds of that simple (but rather domain specific) IPC driver we
> once had, Sebastian. ;)

Yeah, but that driver communicates over mailboxes rather than over
topics.

FWIW, it also is used in a really cool product. ;-)

— 
Sebastian 



  reply	other threads:[~2021-01-26 20:37 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-25 20:20 Look up all IDDP/XDDP labels in the registry from userspace Sam Daniel
2021-01-25 21:07 ` Sam Daniel
2021-01-26 18:07   ` Jan Kiszka
2021-01-26 19:44     ` Sam Daniel
2021-01-26 20:00       ` Jan Kiszka
2021-01-26 20:37         ` Sebastian.Smolorz [this message]
2021-01-27  6:24       ` 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=trinity-9fa294bb-7134-47d5-bdf8-79a42908c354-1611693422979@msvc-mesg-gmx120 \
    --to=sebastian.smolorz@gmx.de \
    --cc=daniel.jacob.samuel@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --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.