Dear Philippe,

Really, thank you very much for your fantastic last email. It has lightened me 
many things.

I still don't know which way I'll finally take, but be sure that this last 
email will be taken into very serious consideration for the decision.
 
> You
> can find recent benchmarks for dual kernel configurations at our web
> site, we intend to add more of them in the future:
> http://xenomai.org/knowledge-base-index/
>
Is there any benchmark for the Mercury (single-kernel) setup?

Is there a planned release date for the Xenomai 3? Should I wait until then to 
start my migration from Xenomai 2 to Xenomai 3 with Mercury core?

Best regards,

Asier Tamayo 
 
 

> -----Mensaje original-----
> De: Philippe Gerum [mailto:[email protected]]
> Enviado el: domingo, 31 de agosto de 2014 19:53
> Para: Asier Tamayo; [email protected]
> Asunto: Re: [Xenomai] Migrating from Xenomai to PREEMPT_RT
> 
> On 08/28/2014 11:57 AM, Asier Tamayo wrote:
> > Dear Philippe,
> >
> > Thank you for your support.
> >
> >> - moving to Yocto means changing the whole environment, unless you go
> >> for Denx's ELDK, which is Yocto-based _and_ Xenomai-enabled, in which
> >> case you would not have to port your application.
> >>
> > Sadly, ELDK doesn't have x86 among its support architectures. Surely,
> they can add it, but at a cost.
> 
> Any option will have a cost, it just depends where you want to invest
> the money in. An intermediate option would be to build your x86 image
> from Yocto's poky integration environment you would have extended with a
> couple of additional recipes for Xenomai. There are recipes/meta already
> floating around for this (I never tested them though).
> 
> >
> >> - moving to straight preempt-rt means changing your programming model
> >> from dual kernel to single kernel, porting your application from
> >> Xenomai's "native" API to POSIX, and porting your drivers to a single
> >> kernel system. A native incarnation of RTDM does exist, but we did not
> >> receive any feedback since it was released (many) years ago, so rough
> >> edges may exist.
> >>
> > Which are the "philosophical" changes in changing my programming model
> from dual kernel to single kernel?
> 
> Moving from "I may only trust a small set of real-time capable
> APIs served by 1% of the embedded kernel code base" to "I have to trust
> the common set of libc calls served by an undefined though certainly
> much larger percentage of the embedded kernel code base". The 1% is
> fully dedicated to real-time, the other percentage is part of a
> multi-purpose kernel dealing with real-time issues among other things.
> This has to change the way you consider which API and drivers are safe
> with respect to real-time behavior.
> 
> > Should I expect many problems in porting the native API to POSIX?
> 
> The original intent of the "native" API (now called "alchemy" in Xenomai
> 3.x) was to provide services which looked familiar to users of
> traditional RTOS APIs (i.e. non-POSIX). For this reason, it provides
> constructs and mechanisms you won't find in POSIX. For instance:
> 
> - specifying the queuing policy (i.e. FIFO/PRIO) for waiting on
> resources is not available with POSIX, actually the standard explicitly
> says that it's wrong to do so, and enforces wait by priority always. So
> if your application only uses the PRIO mode, then ok. If it depends on
> the FIFO mode on purpose, then the application logic has to be revisited.
> 
> - you won't find any support for forcibly suspending/resuming a thread
> in POSIX, the mechanism based on signals is process-scoped. Although
> depending on such feature is not recommended (for the same reason than
> async thread cancellation should not be used), some legacy apps may need
> it. YMMV.
> 
> - the ugly "scheduler lock" feature is not present in POSIX, by design.
> Once again, it's present in the native Xenomai 2.x API to cope with
> legacy constructs used by applications ported from traditional RTOSes.
> 
> - some IPCs won't be there, like event flag groups or buffers. Instead,
> POSIX gives you mutexes and condvars basically for building whatever
> synchronization mechanism you may think of. But you have to build them
> by yourself.
> 
> Many applications based on the native API can be ported to POSIX easily,
> some will require more thought. It boils down to how much an application
> depends on ... non-POSIX constructs, obviously. But only you can assess
> this.
> 
> The reason Xenomai 3.x has a complete implementation of the former
> native 2.x API which also works over a single kernel configuration, is
> precisely to deal with those dependencies in a generic way, without
> switching APIs.
> 
> > Should I try another solution instead of using the native incarnation
> of RTDM in preempt-rt? Which one?
> 
> I don't think anyone but you can reasonably answer this question, there
> is no recipe. If you don't go for the upcoming RTDM native, then you
> will have to convert your RTDM-based drivers to regular linux drivers.
> 
> >
> >> - upgrading Elinos to Xenomai 2.6.x means updating your kernel - which
> >> is something you have to do for other reasons anyway - and building a
> >> drop in replacement of the Xenomai libraries and tools in user-space,
> >> for replacing the legacy ones shipped with Elinos. Kernel-wise, the
> >> requirement is to have an I-pipe patch available for your kernel
> version
> >> of choice. The upcoming Xenomai 2.6.4 supports kernel 3.14.
> >>
> > If I'm not confused, applying the I-pipe patch to the ELinOS kernel
> would add the Xenomai support, but I'm not sure if the ELK tool (Embedded
> Linux Konfigurator) will show me that option. I'll ask Sysgo about this.
> While they answer, has anyone got any experience doing something similar?
> >
> >> Mercury (i.e. single kernel Xenomai 3 configuration) would allow you to
> >> move to preempt-rt without having to switch APIs from Xenomai 2.x
> >> "native" to POSIX.
> >>
> > Is the real-time performance (latency, jitter...) different in the
> single and in the double kernel approaches?
> 
> Yes the figures are different depending on the hardware capabilities.
> The dual kernel involves less overhead to deliver real-time, but the
> single kernel scales better with more CPUs thanks to a finer locking
> model. In short, the co-kernel only deals with real-time issues with no
> interaction with the host kernel in the time-critical paths, which is
> simpler and usually faster. Once the interrupt pipeline is in place, the
> dual kernel only has to cope with hardware latencies for the most part
> (e.g. cache effects, bus locking etc). On the other hand, a single
> kernel configuration still has to cope with both software-generated and
> hardware-generated latencies (e.g. solving priority inversions due to
> the ongoing non-rt work, in addition to hardware latencies).
> 
> This said, the higher the hardware capabilities you have (more efficient
> cores, faster caches, faster DDR, faster buses etc), the better the
> figures in single kernel configuration despite the extra overhead, up to
> the point where dual kernel has no real upside over single kernel with
> preempt-rt for a large class of applications and requirements on high
> end platforms.
> 
> On the other hand, on low end up to mid-range hardware in the embedded
> space, a dual-kernel generally performs significantly better at a
> smaller cost. x86 is special: modern x86 platforms are often on the
> highest end of the embedded space, there the difference between single
> and dual kernel performances may not be large. Again, it only depends on
> your requirements with respect to the acceptable latency.
> 
> Many questions, answered by many options. There is no one-fits-it-all
> solution I'm afraid. I'm certainly beating a dead horse, but the
> conversation should start with the real-time requirements.
> 
> > If the performance depends on the RT approach (i.e., preempt-rt
> performance in the Mercury architecture and Xenomai v2 performance in
> the Cobalt one), are there any benchmarks comparisons between them? The
> ones I have found are quite outdated.
> 
> The Cobalt implementation differs significantly from Xenomai 2
> in many aspects, although they do share the dual kernel approach. You
> can find recent benchmarks for dual kernel configurations at our web
> site, we intend to add more of them in the future:
> http://xenomai.org/knowledge-base-index/
> 
> You can compare the "latency" (-t0, user-space) test by running this
> same program unmodified in a Mercury setup, or implement your own test
> if you want to be free from any supposed Xenomai interaction (actually,
> there is none with this test for Mercury).
> 
> >
> > If I use the Mercury architecture, do I need to patch my ELinOS
> distribution (already with PREEMPT_RT patch) in any way? From the
> documentation, I assume I don't have to, but I need to be sure about this
> point.
> 
> Correct, you don't need any I-pipe patch for Mercury, since the former
> is a dual kernel enabling layer.
> 
> >
> > Best regards,
> >
> > Asier Tamayo
> >
> >
> >> -----Mensaje original-----
> >> De: Philippe Gerum [mailto:[email protected]]
> >> Enviado el: miƩrcoles, 27 de agosto de 2014 13:15
> >> Para: Asier Tamayo; [email protected]
> >> Asunto: Re: [Xenomai] Migrating from Xenomai to PREEMPT_RT
> >>
> >> On 08/27/2014 10:45 AM, Asier Tamayo wrote:
> >>
> >>> Full story:
> >>> I have been using Xenomai for some time and must say I am really happy
> >> with the results (latencies, ease of programming, clear separation
> between
> >> the RT and non-RT parts...). My board is an Atom N270 based one, and
> runs
> >> a kernel 2.6.34 compiled with Sysgo's ELinOS 5.2 tool. I have mainly
> used
> >> the native skin, as well as some RTDM drivers.
> >>>
> >>> Now, I have to start using a new AMD G-Series T52R based board, and
> >> kernel 2.6.34 shows some problems with it. Therefore, I have to update
> the
> >> kernel to a newer one, but ELinOS has dropped the Xenomai support. As
> far
> >> as I can think, I now have three options: try to install Xenomai in
> ELinOS
> >> by myself, start using another tool or leave Xenomai and use the
> >> PREEMPT_RT patch. The first option may be very error prone (in fact, I
> >> have already updated once the Xenomai version in ELinOS, but the tool
> had
> >> Xenomai support integrated previously in it). The second solution would
> >> surely put me in the Yocto path, which I think can be the correct one,
> but
> >> the learning step might require too much time from me.
> >>>
> >>
> >> Actually, updating your Elinos base to Xenomai 2.6.x would likely be
> >> much less error prone than any other option, although I agree that
> >> moving to Yocto is likely the best long term option.
> >>
> >> Looking at the involved components:
> >>
> >> - moving to Yocto means changing the whole environment, unless you go
> >> for Denx's ELDK, which is Yocto-based _and_ Xenomai-enabled, in which
> >> case you would not have to port your application.
> >>
> >> - moving to straight preempt-rt means changing your programming model
> >> from dual kernel to single kernel, porting your application from
> >> Xenomai's "native" API to POSIX, and porting your drivers to a single
> >> kernel system. A native incarnation of RTDM does exist, but we did not
> >> receive any feedback since it was released (many) years ago, so rough
> >> edges may exist.
> >>
> >> - upgrading Elinos to Xenomai 2.6.x means updating your kernel - which
> >> is something you have to do for other reasons anyway - and building a
> >> drop in replacement of the Xenomai libraries and tools in user-space,
> >> for replacing the legacy ones shipped with Elinos. Kernel-wise, the
> >> requirement is to have an I-pipe patch available for your kernel
> version
> >> of choice. The upcoming Xenomai 2.6.4 supports kernel 3.14.
> >>
> >>> So, maybe the right solution would be to leave Xenomai and embrace the
> >> PREEMPT_RT patch, which is already supported by ELinOS. Has anyone got
> any
> >> experience with it? Which difficulties should I expect to find in the
> >> migration process? Any special problems with RTDM, shared memory...?
> >>>
> >>> Has anyone got information about latencies and performance comparison
> >> between Xenomai and PREEMPT_RT patch? I have found some in
> >> https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf, but would like
> to
> >> have as much as possible to make the choice.
> >>>
> >>> Is Xenomai 3 changing my situation in any way? Maybe using the Mercury
> >> architecture, in which I do not need to patch the kernel?
> >>
> >> Mercury (i.e. single kernel Xenomai 3 configuration) would allow you to
> >> move to preempt-rt without having to switch APIs from Xenomai 2.x
> >> "native" to POSIX.
> >>
> >>>
> >>> What do you think about the issue?
> >>>
> >>> [From Xenomai 3 FAQ - http://xenomai.org/introducing-xenomai-3/:
> >>>     Q: I can run POSIX based applications directly over a PREEMPT_RT
> >> kernel on my target system, so what is the point of running Xenomai 3?
> >>>     A: If your application is already fully POSIXish, and the
> >> performances requirements are met, then there is likely no point.(...)]
> >>>
> >>
> >> This is fairly straightforward:
> >>
> >> Xenomai 3 can either supplement the host kernel with a small co-kernel
> >> for delivering real-time performances (aka "Cobalt" configuration), or
> >> fully rely on the underlying kernel if it is deemed real-time already
> >> (aka "Mercury").
> >>
> >> In the latter case, if preempt-rt is available on your hardware/kernel
> >> combo, meets your real-time performance requirements, then you do not
> >> need Xenomai 3 to write POSIX apps, since the glibc provides for this
> API.
> >>
> >> However, if your app is not POSIXish but based on an API Xenomai
> >> emulates/implements, then you may want to use Xenomai 3 compared to
> >> converting this app to POSIX, which is quite often an error prone
> >> process. Xenomai 2.x "native" API is available with Xenomai 3,
> including
> >> for a single kernel configuration (e.g. preempt-rt).
> >>
> >> --
> >> Philippe.
> >
> 
> 
> --
> Philippe.
> 
> 
> 
> 


_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to