Re: Updated dataflow semantics for RTT
BiggsGeoffrey <[email protected]> Mon, 28 Sep 2015 06:54:29 +0000
| Newsgroups | gmane.science.robotics.orocos.devel |
|---|---|
| Message-ID | <D22EB030.D8A6%[email protected]> |
On 28/9/15, 07:28, "Herman Bruyninckx" <[email protected]> wrote: >On Mon, 28 Sep 2015, BiggsGeoffrey wrote: > >> On 27/9/15, 14:10, "[email protected] on behalf >>of >> Herman Bruyninckx" <[email protected] on behalf >>of >> [email protected]> wrote: >>> >>> Thanks for this nice effort. I think it is really time to consider a >>>next >>> generation of Orocos RTT... >>> >>> If you allow me to bring in my two cents... It's possible that you >>>won't >>> like the >>> message, or find it off-topic, but I think I should share it with you >>> anyway... >>> >>> The best document I have read about communication that connects >>> high-performance with flexibility and configurability is this one: >>> >>> >>><https://engineering.linkedin.com/distributed-systems/log-what-every-sof >>>tw >>> are-engineer-should-know-about-real-time-datas-unifying> >>> >>> It cleanly separates the communication of "events" from (i) what they >>> mean, >>> (ii) who is interested in them, and (iii) with what policy they are >>> consumed. >>> >>> In our current research at KU Leuven, this is going to be _the_ basis >>>for >>> all interaction between asynchronous activities. >>> The other basis will be the separation between (i) functional >>>requirements >>> of the application, (ii) "roles and responsibilities" of "components", >>> (iii) software components to implement both, and (iv) deployment of >>>these >>> components on your hardware and OS platforms. >>> >>> All of the above are not present in Orocos RTT, which I consider design >>> flaws. >>> So solving these problems is definitely worthwhile. But, and this is a >>>big >>> but, my view on solving them (which is currently being transformed into >>> a first set of models and code and tools) implies that we do not need >>> Orocos RTT at all anymore. The reasons why we started RTT more than >>> fifteen >>> years ago have not disappeared, but have all been solved in more >>> "mainstream" >>> software projects than Orocos. Fifteen years ago, what we where after >>>was >>> a >>> "node-port-connector" modelling-and-coding interface, where nodes >>>could be >>> deployed in realtime activities on an operating system. It was the >>>time of >>> single core CPUs, with only proprietary solutions to fast networking. >>> Those >>> days have gone, together with the need to use RTT as a software >>>solution. >>> >>> More in particular, the "communication" aspect (which is the core of >>>the >>> document you distributed) is a lot better understood and supported in >>> mainstream than 15 years ago. Taking the model of the event log and the >>> corresponding log processing around it means that all the policies that >>> your document wants to introduce as "API" methods can (should...) >>>better >>> be >>> realised by configurations of the event log mechanism in your >>>_application >>> architecture_; there is no need to provide APIs in "middleware", >>> "frameworks" or "libraries". >>> >>> _The_ core functionalities of RTT that still survive after 15 years >>>are: >>> - its introspection capabilities; >>> - the lock-free data buffer. >>> The latter is just a special case ("configuration") of the event log >>> mechanism, that provides all other policies that you mention (and >>>more!) >>> just through other configurations. >>> The introspection is a form of "model based" implementation, which >>> considers models as first-class citizens in the software; this is >>>great, >>> and should be extended, starting with modelling all the relevant event >>>log >>> policies explicity. (KU Leuven is working on that; it takes a lot of >>> efforts...) Lock-free data buffers are the core of event log >>>processing, >>> and are currently better known under the new buzzword "immutable data". >>> >>> The other "good-intuition-that-turned-out-to-be-badly-implemented" of >>> fifteen years ago is that of "stored procedures" (known under various >>> names, such as "microservices", proxy computations, etc.). RTT >>>provides a >>> very complex and ambiguous API to let one component execute code for >>> another component. Again, that functionality should not be provided by >>>an >>> "RPC API", but by models and tools of _deployment_. >>> >>> The added value of Orocos as a project could shift from providing code >>>to >>> providing professional quality documentation and tutorials for "best >>> practices" and "patterns", some specific realtime-optimized >>> implementations, or patches to the large amount of existing libraries >>>that >>> support alul of the above. >>> >>> It is up to the Orocos community to decide whether to go that >>>direction or >>> not. I would be glad to cooperate in that directoion, because >>>otherwise we >>> will be forced to start a "competing" project. >>> >>> Note that this message does not contain threats to "fork" or whatever, >>>but >>> just my insights after working with Orocos RTT for about a decade, and >>> having Orocos RTT work against the architectural requirements in our >>> robotics projects for the subsequent five years... >>> >>> I frankly think it is time to reinvent the project. Big time. >>> >>> The easiest way is to _deprecate_ things, to make the _core_ things >>> simpler >>> for users, throwing out more and more code and start using other >>>already >>> existing software (ZeroMQ, libevent, the lock-free buffer library, >>> RethinkDB,...) instead of trying to squeeze in their functionalities >>> within >>> NIH APIs and implementations. In the end, RTT will be empty, and the >>> development efforts can then finally shift to give Sylvain a much >>>bigger >>> hand with ROCK :-) >>> (Just make sure to refactor ROCK in order to decouple the _models_ from >>> the >>> Ruby and RTT _implementations_ :-)) >>> >>> Best regards, >>> >>> Herman Bruyninckx >> >> There are some potentially interesting ideas in there, Herman. But >>either >> your email is uncharacteristically incoherent or I’m really jet lagged. >> Could you explain more clearly what you currently think is the ideal? > >1. Complete separation of _any_ communication policy from the activity > execution policies: there are just way too many use cases that must be > supported to bring them all behind one API. (Which is also what ROS2.0 > tries to do.) >2. "Event processing" is the most flexible _mechanism_ to build other > communication policies upon. The most important lesson that _I_ learned > in this context is that it allows "clients" and "servers" to choose > whatever policy they like _locally_, since all data is immutable. >(Except > for some "long term" garbage collection.) Does this imply distributing all provided data that a component asks for to that component and having it all buffered to be used according to the local policies? >3. Executing activities in realtime currently does not require a separate > library/framework anymore, but is realised by control groups (on >Linux), or > similar functionalities on other OSs. >4. Similarly, systemd has (or is in the process of) taken over all > configuration issues. And caused many a flame war in the process. :) >5. The expertise that the RTT community excels in is that of _designing_ > realtime systems, with or without the RTT code. And that is more than > enough to warrant the continuation of this community, even when none >of > the code is kept, since "best practices" are useful everywhere. So reading between the lines, I think that what you’re saying is that we should use a component-based approach at the model level, and the code generated from that doesn’t need to have a component-based framework, it can just use all these existing technologies to provide the functionality. Is this correct? Geoff > >> For clarity, we can skip the comments Orocos, since we’ve already >> established that you think it needs to change. > >My thoughts go further: there is no need for it anymore. > >> Geoff > >Herman -- Orocos-Dev mailing list [email protected] http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev