Re: Updated dataflow semantics for RTT
S Roderick <[email protected]> Mon, 28 Sep 2015 17:30:45 +0000 (GMT)
| Newsgroups | gmane.science.robotics.orocos.devel |
|---|---|
| Message-ID | <[email protected]> |
--===============1598272345== Content-type: multipart/alternative; boundary="Boundary_(ID_SOf2wMVgvBEoxCMhwvojyw)" --Boundary_(ID_SOf2wMVgvBEoxCMhwvojyw) Content-type: text/plain; charset=utf-8; format=flowed Content-transfer-encoding: quoted-printable On Sep 28, 2015, at 10:28 AM, Sylvain Joyeux <[email protected]> wrot= e:=0A=0AI agree with much at the above, and we have similar problems that = we've=0Asolved in similar ways. But there are also huge parts of our syste= m that,=0Awhile "data driven", aren't at all interested in time. The syste= m itself is=0Asynchronized and time is (largely) irrelevant - everything o= perates on a=0Aper-cycle basis. In the long run, we time stamp only a tiny= portion of the=0Adata in our system due to this. Equally valid, but diffe= rent.=0A=0AI don't dispute that you probably have a very good point, you u= sually=0Ado, but could you provide me with a concrete example of such a se= tup=0Athat uses buffers ? It would really help me grasp the situation.=0A=C2= =A0=0ASome classic producer/consumer examples=0A=C2=A0- a camera captures = images and sends them on to a processing pipeline (that is all data object= connections). A separate connection stores the camera images in a buffer,= which are dumped to disk.=0A- data is read (non-real-time) from a file an= d pushed into a buffer for processing (real-time)=0A- data samples coming = from a remote source (non-real-time) is buffered on arrival into the deplo= yer for later processing (real-time).=0A=0ASometimes we want to control wh= ether the network access (and hence=0Adelay/non-real-time part) is on the = writer or reader side. That should be an=0Aapplication-level choice.=0A=0A= Agreed, but this choice is currently bundled with having a buffer per=0Ach= annel or one per input port.=0A=0AI don't follow, Sylvain. Bundled in the = existing implementation or the proposed changes?=0A=0AIf you put the buffe= r per-port, you end up with one policy per port.=0APort-driven triggering = (event ports) are governed by the data object=0A(i.e. per-port), data obje= ct size and type becomes per-port as well.=0AWhat's left in the connection= policy is the info necessary to reach=0Athe other side (i.e. the topic na= me in ROS), which means that it is=0Anot a policy anymore but a "remote en= dpoint"=0A=0A=0AWhat if you don't use event ports?=0A=0AHow is that releva= nt ? Are we misunderstanding each other here ?=0A=C2=A0=0AFrom your commen= t above "Port-driven triggering (event ports) =E2=80=A6"=0A=0AAs I underst= and the proposal so far, we have: either you pull (hit=0Anetwork on read, = one buffer per channel) or push (not hit network on=0Aread, have a one buf= fer per port). The middle ground of=0Aone-buffer-per-channel and not hitti= ng network is not covered, and=0Athat's what *greatly* bothers me.=0A=C2=A0= =0AOur original intent was that pull/push would be independent of shared/p= rivate (if you mean that by "one buffer per channel" and "one buffer per p= ort").=0A=0AI know you guys probably have a good case here, I am trying ve= ry hard=0Afor you to not break mine=0A=0AI'm with you on this, Sylvain!=0A= =0ANote the "selectively remove" above - we still want to be able to use=0A= v2-flow-status type setups within our system.=0A=0AMy understanding of the= proposal is that the v2 semantic are not=0Aavailable anymore. I'm not pus= hing against what you need, I want you=0Ato not break what I need.=0A=C2=A0= =0AI'm personally against changing the default, even though it would help = me. This kind of pervasive breakage isn't good for the community ...=0A=0A= =C2=A0- what are going to be the options of network/no-network and=0Aplace= ment of buffer ?=0A- how can these options be or not be used with a single= output /=0Asingle input ? Are they mutually exclusive ? Can they be used = together=0Aon the same input port ? On the same output port ?=0A=0ALooking= at Section 5.1 of=C2=A0Johannes' google doc, something looks wrong or I'm= remembering previous discussions incorrectly. I was expecting push/pull v= s shared/private to be truly orthogonal, but=C2=A0the=C2=A0push/private fi= gure says differently. Johannes? Peter?=0A=0AIn particular, from Section 5= .2:=0A=0AOther than currently in v2, in the=C2=A0push=C2=A0case (pull=3Dfa= lse) there will be only one buffer per input port, that is shared among al= l connections. The connected output ports =E2=80=9Cpush=E2=80=9D their dat= a through the channel and fill the input buffer (or overwrite the data obj= ect), but every input port has its own buffer or data object and can read = independently (Fig. 4)=0A=0AWhy doesn't every input port have a connection= object per associated output port? Why isn't the push/private figure the = same as the pull/private figure, except that the connection object is on t= he reader side (and for each input port, you'd have one connection object = per output port)? Or is this to try and fix the non-determinstic behavior = when an InputPort reads from multiple connection objects?=0A=0AWe have sev= eral hundred local connections in our deployers. We have maybe=0Aless than= 10 remote connections.=0A=0AAgain, how is this relevant ? If the policy i= s specified per-port, you=0Awon't have any "kind-of-sane default" to confi= gure the CORBA=0Adispatchers with.=C2=A0=0ABuffers vs data connections def= initely change the flavor of things. The vast=0Amajority of our connection= s are data connections, not buffers.=0A=0AI *know* which leads to this lon= g discussion, because I am on the=0Acompletely other end of things: we mos= tly use buffered connections.=0A=C2=A0=0AWhich is good IMHO, because it me= ans that you and I effectively span the spectrum of system approaches. So = if we can find a way to satisfy both our system approaches, then likely we= 'll cater for everyone else as well.=0A=0AI think that we're getting off t= opic as a whole.=0A=0AI don't think so. So far, my concerns with the propo= sal are still=0Athere: by getting closer to v1 semantics, the proposal bre= aks v2=0Asemantics in a way that is fundamental to me. Peter's post actual= ly=0Aleads me to think that this breakage and known and desired, which is=0A= why I am spending so much time trying to get my point across, while I=0Aal= ready have way too much on my plate.=0A=C2=A0=0AAgain, my intent was to ad= d more v1-like semantics to the system, as well as have more control on wh= ere latency occurred. Not to replace any aspect of the v2 semantics.=0A=0A= a) push vs pull, or specifying whether the data/buffer object is on the=0A= reader or writer side. This is very useful for system designers dealing wi= th=0Asignificant time delay.=0Ab) private vs shared, whether a connection = is per input/output port pair or=0Awhether the connection is shared betwee= n multiple input/output ports.=0A=0ASo far, "private" is defined one buffe= r *per input port* (change in=0Asemantic) not *per input/output port pair*= (current v2 semantic)=0A=C2=A0=0AI think we should postpone the "changing= the defaults" discussion. For a v2.9 type release that could include the = proposed changes, having the default not change would be of most benefit t= o the community I think. In the future, if/when we decide that a different= set of defaults is=C2=A0more appropriate, we could phase that into future= releases in a way that minimizes disruption to the community.=0A=0ACheers= =0AStephen= --Boundary_(ID_SOf2wMVgvBEoxCMhwvojyw) Content-type: multipart/related; boundary="Boundary_(ID_OnQ0BUCm0GD50YR/hqDPWQ)"; type="text/html" --Boundary_(ID_OnQ0BUCm0GD50YR/hqDPWQ) Content-type: text/html; charset=utf-8 Content-transfer-encoding: quoted-printable <html><body><div><span style=3D"line-height: 1.5;">On Sep 28, 2015, at 10:28 AM, Sylva= in Joyeux <[email protected]> wrote:</span></div><div><br></div= ><div><blockquote type=3D"cite"><div class=3D"msg-quote"><div class=3D"_st= retch"><blockquote class=3D"quoted-plain-text" type=3D"cite">I agree with = much at the above, and we have similar problems that we've</blockquote><bl= ockquote class=3D"quoted-plain-text" type=3D"cite">solved in similar ways.= But there are also huge parts of our system that,</blockquote><blockquote= class=3D"quoted-plain-text" type=3D"cite">while "data driven", aren't at = all interested in time. The system itself is</blockquote><blockquote class= =3D"quoted-plain-text" type=3D"cite">synchronized and time is (largely) ir= relevant - everything operates on a</blockquote><blockquote class=3D"quote= d-plain-text" type=3D"cite">per-cycle basis. In the long run, we time stam= p only a tiny portion of the</blockquote><blockquote class=3D"quoted-plain= -text" type=3D"cite">data in our system due to this. Equally valid, but di= fferent.</blockquote><span class=3D"body-text-content"><span class=3D"body= -text-content"><br>I don't dispute that you probably have a very good poin= t, you usually<br>do, but could you provide me with a concrete example of = such a setup<br>that uses buffers ? It would really help me grasp the situ= ation.</span></span></div></div></blockquote><span> </span></div><div= >Some classic producer/consumer examples</div><div> - a camera captur= es images and sends them on to a processing pipeline (that is all data obj= ect connections). A separate connection stores the camera images in a buff= er, which are dumped to disk.</div><div>- data is read (non-real-time) fro= m a file and pushed into a buffer for processing (real-time)</div><div>- d= ata samples coming from a remote source (non-real-time) is buffered on arr= ival into the deployer for later processing (real-time).</div><div><br><bl= ockquote type=3D"cite"><div class=3D"msg-quote"><div class=3D"_stretch"><b= lockquote class=3D"quoted-plain-text" type=3D"cite">Sometimes we want to c= ontrol whether the network access (and hence</blockquote><blockquote class= =3D"quoted-plain-text" type=3D"cite">delay/non-real-time part) is on the w= riter or reader side. That should be an</blockquote><blockquote class=3D"q= uoted-plain-text" type=3D"cite">application-level choice.</blockquote><spa= n class=3D"body-text-content"><span class=3D"body-text-content"><br>Agreed= , but this choice is currently bundled with having a buffer per<br>channel= or one per input port.</span></span></div></div></blockquote></div><div><= span><br></span></div><div>I don't follow, Sylvain. Bundled in the existin= g implementation or the proposed changes?</div><div><br><blockquote type=3D= "cite"><div class=3D"msg-quote"><div class=3D"_stretch"><blockquote class=3D= "quoted-plain-text" type=3D"cite">If you put the buffer per-port, you end = up with one policy per port.</blockquote><blockquote class=3D"quoted-plain= -text" type=3D"cite">Port-driven triggering (event ports) are governed by = the data object</blockquote><blockquote class=3D"quoted-plain-text" type=3D= "cite">(i.e. per-port), data object size and type becomes per-port as well= .</blockquote><blockquote class=3D"quoted-plain-text" type=3D"cite">What's= left in the connection policy is the info necessary to reach</blockquote>= <blockquote class=3D"quoted-plain-text" type=3D"cite">the other side (i.e.= the topic name in ROS), which means that it is</blockquote><blockquote cl= ass=3D"quoted-plain-text" type=3D"cite">not a policy anymore but a "remote= endpoint"</blockquote><blockquote class=3D"quoted-plain-text" type=3D"cit= e"><br></blockquote><blockquote class=3D"quoted-plain-text" type=3D"cite">= <br></blockquote><blockquote class=3D"quoted-plain-text" type=3D"cite">Wha= t if you don't use event ports?</blockquote><span class=3D"body-text-conte= nt"><span class=3D"body-text-content"><br>How is that relevant ? Are we mi= sunderstanding each other here ?</span></span></div></div></blockquote><sp= an> </span></div><div>From your comment above "Port-driven triggering= (event ports) =E2=80=A6"</div><div><br><blockquote type=3D"cite"><div cla= ss=3D"msg-quote"><div class=3D"_stretch"><span class=3D"body-text-content"= ><span class=3D"body-text-content">As I understand the proposal so far, we= have: either you pull (hit<br>network on read, one buffer per channel) or= push (not hit network on<br>read, have a one buffer per port). The middle= ground of<br>one-buffer-per-channel and not hitting network is not covere= d, and<br>that's what *greatly* bothers me.</span></span></div></div></blo= ckquote><span> </span></div><div>Our original intent was that pull/pu= sh would be independent of shared/private (if you mean that by "one buffer= per channel" and "one buffer per port").</div><div><br><blockquote type=3D= "cite"><div class=3D"msg-quote"><div class=3D"_stretch"><span class=3D"bod= y-text-content"><span class=3D"body-text-content">I know you guys probably= have a good case here, I am trying very hard<br>for you to not break mine= </span></span></div></div></blockquote></div><div><br></div><div>I'm with = you on this, Sylvain!</div><div><br><blockquote type=3D"cite"><div class=3D= "msg-quote"><div class=3D"_stretch"><blockquote class=3D"quoted-plain-text= " type=3D"cite">Note the "selectively remove" above - we still want to be = able to use</blockquote><blockquote class=3D"quoted-plain-text" type=3D"ci= te">v2-flow-status type setups within our system.</blockquote><span class=3D= "body-text-content"><span class=3D"body-text-content"><br>My understanding= of the proposal is that the v2 semantic are not<br>available anymore. I'm= not pushing against what you need, I want you<br>to not break what I need= .</span></span></div></div></blockquote><span> </span></div><div>I'm = personally against changing the default, even though it would help me. Thi= s kind of pervasive breakage isn't good for the community ...</div><div><b= r></div><div><blockquote type=3D"cite"><div class=3D"msg-quote"></div></bl= ockquote><blockquote type=3D"cite"><div class=3D"msg-quote"><div class=3D"= _stretch"><span class=3D"body-text-content"><span class=3D"body-text-conte= nt"> - what are going to be the options of network/no-network and<br>= placement of buffer ?</span></span></div></div></blockquote></div><div><bl= ockquote type=3D"cite"><div class=3D"msg-quote"><div class=3D"_stretch"><s= pan class=3D"body-text-content"><span class=3D"body-text-content">- how ca= n these options be or not be used with a single output /<br>single input ?= Are they mutually exclusive ? Can they be used together<br>on the same in= put port ? On the same output port ?</span></span></div></div></blockquote= ><span><div><span><br></span></div><div><span>Looking at Section 5.1 of&nb= sp;</span><span style=3D"line-height: 1.5;">Johannes' google doc, somethin= g looks wrong or I'm remembering previous discussions incorrectly. I was e= xpecting push/pull vs shared/private to be truly orthogonal, but </sp= an>the<span style=3D"line-height: 1.5;"> push/private figure says dif= ferently. Johannes? Peter?</span></div><div><span style=3D"line-height: 1.= 5;"><br></span></div><div><span style=3D"line-height: 1.5;">In particular,= from Section 5.2:</span></div><div><span style=3D"line-height: 1.5;"><br>= </span></div><div><em><span style=3D"font-family: Arial; line-height: norm= al; orphans: 2; widows: 2;" data-mce-style=3D"font-family: Arial; line-hei= ght: normal; orphans: 2; widows: 2;">Other than currently in v2, in the&nb= sp;</span><span class=3D"c2" style=3D"font-weight: bold; font-family: Aria= l; line-height: normal; orphans: 2; widows: 2;" data-mce-style=3D"font-wei= ght: bold; font-family: Arial; line-height: normal; orphans: 2; widows: 2;= ">push </span><span style=3D"font-family: Arial; line-height: normal;= orphans: 2; widows: 2;" data-mce-style=3D"font-family: Arial; line-height= : normal; orphans: 2; widows: 2;">case (</span><span class=3D"c0" style=3D= "font-family: 'Courier New'; line-height: normal; orphans: 2; widows: 2;" = data-mce-style=3D"font-family: 'Courier New'; line-height: normal; orphans= : 2; widows: 2;">pull=3Dfalse</span><span style=3D"font-family: Arial; lin= e-height: normal; orphans: 2; widows: 2;" data-mce-style=3D"font-family: A= rial; line-height: normal; orphans: 2; widows: 2;">) there will be only on= e buffer per input port, that is shared among all connections. The connect= ed output ports =E2=80=9Cpush=E2=80=9D their data through the channel and = fill the input buffer (or overwrite the data object), but every input port= has its own buffer or data object and can read independently (Fig. 4)</sp= an></em></div><div><br></div><div>Why doesn't every input port have a conn= ection object per associated output port? Why isn't the push/private figur= e the same as the pull/private figure, except that the connection object i= s on the reader side (and for each input port, you'd have one connection o= bject per output port)? Or is this to try and fix the non-determinstic beh= avior when an InputPort reads from multiple connection objects?</div></spa= n></div><div><br></div><div><blockquote type=3D"cite"><div class=3D"msg-qu= ote"><div class=3D"_stretch"><blockquote class=3D"quoted-plain-text" type=3D= "cite">We have several hundred local connections in our deployers. We have= maybe</blockquote><blockquote class=3D"quoted-plain-text" type=3D"cite">l= ess than 10 remote connections.</blockquote><span class=3D"body-text-conte= nt"><span class=3D"body-text-content"><br>Again, how is this relevant ? If= the policy is specified per-port, you<br>won't have any "kind-of-sane def= ault" to configure the CORBA<br>dispatchers with.</span></span><span style= =3D"line-height: 1.5; font-family: 'Helvetica Neue', Helvetica, Arial, san= s-serif;"> </span></div></div></blockquote></div><div><blockquote typ= e=3D"cite"><div class=3D"msg-quote"><div class=3D"_stretch"><blockquote cl= ass=3D"quoted-plain-text" type=3D"cite">Buffers vs data connections defini= tely change the flavor of things. The vast</blockquote><blockquote class=3D= "quoted-plain-text" type=3D"cite">majority of our connections are data con= nections, not buffers.</blockquote><span class=3D"body-text-content"><span= class=3D"body-text-content"><br>I *know* which leads to this long discuss= ion, because I am on the<br>completely other end of things: we mostly use = buffered connections.</span></span></div></div></blockquote><span> </= span></div><div>Which is good IMHO, because it means that you and I effect= ively span the spectrum of system approaches. So if we can find a way to s= atisfy both our system approaches, then likely we'll cater for everyone el= se as well.</div><div><br><blockquote type=3D"cite"><div class=3D"msg-quot= e"><div class=3D"_stretch"><blockquote class=3D"quoted-plain-text" type=3D= "cite">I think that we're getting off topic as a whole.</blockquote><span = class=3D"body-text-content"><span class=3D"body-text-content"><br>I don't = think so. So far, my concerns with the proposal are still<br>there: by get= ting closer to v1 semantics, the proposal breaks v2<br>semantics in a way = that is fundamental to me. Peter's post actually<br>leads me to think that= this breakage and known and desired, which is<br>why I am spending so muc= h time trying to get my point across, while I<br>already have way too much= on my plate.</span></span></div></div></blockquote><span> </span></d= iv><div>Again, my intent was to add more v1-like semantics to the system, = as well as have more control on where latency occurred. Not to replace any= aspect of the v2 semantics.</div><div><br></div><div><blockquote type=3D"= cite"><div class=3D"msg-quote"><div class=3D"_stretch"><blockquote class=3D= "quoted-plain-text" type=3D"cite">a) push vs pull, or specifying whether t= he data/buffer object is on the</blockquote><blockquote class=3D"quoted-pl= ain-text" type=3D"cite">reader or writer side. This is very useful for sys= tem designers dealing with</blockquote><blockquote class=3D"quoted-plain-t= ext" type=3D"cite">significant time delay.</blockquote><blockquote class=3D= "quoted-plain-text" type=3D"cite">b) private vs shared, whether a connecti= on is per input/output port pair or</blockquote><blockquote class=3D"quote= d-plain-text" type=3D"cite">whether the connection is shared between multi= ple input/output ports.</blockquote><span class=3D"body-text-content"><br>= So far, "private" is defined one buffer *per input port* (change in<br>sem= antic) not *per input/output port pair* (current v2 semantic)</span></div>= </div></blockquote><span> </span></div><div>I think we should postpon= e the "changing the defaults" discussion. For a v2.9 type release that cou= ld include the proposed changes, having the default not change would be of= most benefit to the community I think. In the future, if/when we decide t= hat a different set of defaults is <span style=3D"line-height: 1.5;">= more appropriate, we could phase that into future releases in a way that m= inimizes disruption to the community.</span></div><div><span style=3D"line= -height: 1.5;"><br></span></div><div><span style=3D"line-height: 1.5;">Che= ers</span></div><div><span style=3D"line-height: 1.5;">Stephen</span></div= ></body></html>= --Boundary_(ID_OnQ0BUCm0GD50YR/hqDPWQ)-- --Boundary_(ID_SOf2wMVgvBEoxCMhwvojyw)-- --===============1598272345== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- Orocos-Dev mailing list [email protected] http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev --===============1598272345==--