On 12 May 2016 at 19:44, Bill Fischofer <bill.fischo...@linaro.org> wrote:

>
>
> On Thu, May 12, 2016 at 8:24 AM, Christophe Milard <
> christophe.mil...@linaro.org> wrote:
>
>> Hi Bill,
>> Just sent you a v4 containing my proposal regarding the FSMs and the text
>> around it.
>> I still have a few comments:
>>
>> First, your FSM mixed events and actions on the transition arrow. I could
>> not get graphviz to have 2 colors on the same transition (one for events,
>> one for actions), so I have restricted them to events. The only action
>> worth mentioning is the event queuing action which is clearly described by
>> your text (and a reminder in mine). The square node could be a way to
>> represent it, but I don't like mixing event and action undistinguished. As
>> long as it is clear and consistent (it seems I have a need for that these
>> days...), I won't bother you.
>>
>
> I think it's fine this way.  The expiration/schedule call adds detail
> because a timeout isn't actually delivered until the scheduler returns it
> to a thread, but I think this is clear enough here.
>
>

On V5:
Maybe the error originated from me (?), but I see that the TO_Delivered
node is double ringed: Double ringed node would show the start state, so I
think it shouldn't be double ringed. If the intention was to show the final
state (though there isn't really one here: a TO event can be reused I
assume), then the Timer_Expired state should be double ringed as well. But
as mentionned, as I cannot clearly see any final state here, I would simply
remove the double ring from the TO_delivered state.

>
>> Then a few questions:
>>
>> 1)My Time-out FSM does not show what happens to a time-out event when an
>> odp_timer_free() is called while the timeout is in delivered state. I
>> assume the time-out remains in delivered state until a
>> odp_event_free/timeout_free() is called manually, but I am not sure (having
>> 2 different FSM actally clarify this point). You are welcome to update my
>> FSMs if we should keep them.
>>
>
> Nothing happens to the event since the association between timer and
> timeout ends as soon as the timer expires. At that point the timer is in
> the "Timer_Expired" state and the Timeout moves to the "Timeout_Delivered"
> state (Timeout_Pending in my previous diagram). So they're no longer
> coupled and operations on one no longer affect the other.
>

In that case there should be a transition TO_delivered->TO_delivered
labeled odp_timer_free()


>
>
>>
>> 2)Your text says "Following start, applications may allocate, set,
>> cancel, and free, timers...". I guess the comma after "timer" is a typo.
>>
>
> Yes, thanks for the correction.
>
>
>>
>> 3)The last sentence in your text is: "However, upon receiving a timeout
>> event the application can use the odp_timeout_fresh() API to inquire
>> whether the timeout event is fresh or stale". What is the definition of a
>> stale timer?
>>
>
> This was a back reference to the earlier sentence discussing
> odp_timer_cancel(): "An attempted cancel will fail if the timer is not set
> or if it has already
> expired."  However, I recall this was an area that Ola and Petri debated
> extensively when these were first defined. There is an implicit imprecision
> in any efficient timer system since independent threads can be setting,
> resetting, and cancelling timers while they are "in flight". Generally when
> a timeout event is received it's the responsibility of the application to
> determine whether that event is meaningful or not based on other
> information it has (e.g., it's a TCP delayed ACK timer, but we've just
> received a packet on that connection so I should ignore this event, etc.).
>  odp_timer_fresh() is a hook that allows the implementation to communicate
> staleness information if it knows something that the application might not
> otherwise know, but I expect most applications will just ignore this as a
> reported "fresh" timer may still not be meaningful from the application's
> perspective for reasons it knows.
>

Not sure I understand that. I'll need explanations, and I guess the doc as
well.

>
>
>>
>> 4) And I kept the best for the end... :-)
>> What about the validity of the pointer returned by odp_timeout_user_ptr()
>> when the timer was set by odp thread A on a queue belonging to ODP thread B
>> (B != A). Interresting question isn't it? :-).
>>
>>
> The user ptr should really be revised for Tiger Moth to include a length
> (just as we did for queues) so that it can be part of scheduler
> prefetching. But as you know Monarch assumes everything is running in the
> same address space.  Make a note of this (and similar context pointers) as
> this is something we need to cover in Tiger Moth process discussions.
>

OK. Pity you are right here as I saw this as a good opportunity to trigger
some more opinions regarding the the process/thread debate... But you are
right: the aim is Monarch, and monarch just goes thread, so I cannot stop
you there :-)

I suggest we take a small HO as soon as possible (ping me when you want) so
you can explain the thing I don't understand and we can agree on a phrasing
around it on the fly.
Sorry, I see a need for V6, but I'll be on your side to make it the last
one :-)

Christophe.

>
>
>
>> Thanks for reading...
>>
>
>
> After now reading this I don't think a v6 is needed unless you do.
>
>
>>
>> Christophe.
>>
>> On 12 May 2016 at 14:08, Bill Fischofer <bill.fischo...@linaro.org>
>> wrote:
>>
>>> The green is for Timer related transitions while the blue is for Timeout
>>> related transitions. This format also seemed to get rid of some of the
>>> annoying line crossings. The red arrows are the transitions that relate to
>>> timer expiration and resulting timeout event scheduling, neither of which
>>> involve Timer APIs. So the colors were supposed to make things easier to
>>> read.
>>>
>>> I'm all for improving clarity, so if you have a better way of diagraming
>>> this that's great. I believe the diagrams and text go together in either
>>> case and are intended to be taken together to improve understanding.  The
>>> goal of each of these sections of the User Guide should be to give readers
>>> confidence that they understand how to use these APIs in writing their own
>>> ODP applications, or for ODP implementers to understand the semantics they
>>> need to provide in their own implementations of them.
>>>
>>> On Thu, May 12, 2016 at 3:13 AM, Christophe Milard <
>>> christophe.mil...@linaro.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> I am still confused with this shared FSM for the 2 distinct objects:
>>>> The red seems to be actions associated with the transitions (and the timer
>>>> expiration event is no longer shown on the transition showing the actions).
>>>> I am not sure what the distinction between the green and blue events are.
>>>> I propose the following: I will send a complete proposal to you,
>>>> including both the FSMs and the text. If we still disagree on which one is
>>>> clearer, we'll let other reviewer decide (you/I would sent a v4 with my
>>>> stuff in). If no one does react, I am ok to mark your proposal as reviewed
>>>> because some doc is better than none.
>>>>
>>>> So you are sure to  win :-)
>>>>
>>>> Christophe.
>>>>
>>>> On 11 May 2016 at 01:47, Bill Fischofer <bill.fischo...@linaro.org>
>>>> wrote:
>>>>
>>>>> I looked at them and I liked the added color so reworked my diagram
>>>>> adding that and posted a v3 for it. I'm not sure trying to separate into
>>>>> two diagrams really helps but perhaps this reworked diagram is easier to
>>>>> follow?
>>>>>
>>>>> On Tue, May 10, 2016 at 3:45 AM, Christophe Milard <
>>>>> christophe.mil...@linaro.org> wrote:
>>>>>
>>>>>> Hi Bill,
>>>>>>
>>>>>> Just sent you an RFC with 2 FSMs.
>>>>>> Had to fight a bit with graphviz. Not finished yet. I will continue
>>>>>> working on it if you think that makes sense...
>>>>>> Christophe.
>>>>>>
>>>>>> On 9 May 2016 at 17:15, Bill Fischofer <bill.fischo...@linaro.org>
>>>>>> wrote:
>>>>>>
>>>>>>> As we discussed in our call, we can both play around with graphviz
>>>>>>> and see if a prettier diagram can be constructed that is perhaps 
>>>>>>> clearer,
>>>>>>> possibly with two separate FSMs.
>>>>>>>
>>>>>>> On Mon, May 9, 2016 at 9:39 AM, Christophe Milard <
>>>>>>> christophe.mil...@linaro.org> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 9 May 2016 at 16:28, Bill Fischofer <bill.fischo...@linaro.org>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Mon, May 9, 2016 at 7:58 AM, Christophe Milard <
>>>>>>>>> christophe.mil...@linaro.org> wrote:
>>>>>>>>>
>>>>>>>>>> I am a bit confused by this diagram: It feels to me that timers
>>>>>>>>>> and timeout have separate lives (even , if of course some dependency
>>>>>>>>>> exist).
>>>>>>>>>> From this diagram, it feels like these 2 separate objects (timers
>>>>>>>>>> and time out events) share states...? do they?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Actually they do, which is what this diagram is trying to express.
>>>>>>>>> When a timer is set one of the arguments is the timeout event that 
>>>>>>>>> should
>>>>>>>>> be associated with it, so it is an error to attempt to free that event
>>>>>>>>> while it is associated with a set timer (results are undefined if you 
>>>>>>>>> do).
>>>>>>>>> Timers are somewhat unique in this respect.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Sorry, Bill I still don't get it: Aren't you saying here that these
>>>>>>>> are 2 separate FSMs, but that these 2 separate FSMs are actually
>>>>>>>> actionned/"triggered" by (partly) the same events? There is nothing 
>>>>>>>> wrong
>>>>>>>> with that... Then they should be represented as 2 separated FSM with 
>>>>>>>> the
>>>>>>>> same event names on the transitions triggered by the same events...
>>>>>>>>  Or I am very confused...
>>>>>>>>
>>>>>>>> Christophe.
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> In my head, and from the understanding I had, it feels that the
>>>>>>>>>> to 4 top states are for timers, whereas time-out events have only 2 
>>>>>>>>>> states:
>>>>>>>>>> Unallocated or allocated.
>>>>>>>>>> It feels you are doing 1 FSM out of two. Maybe , it should be two
>>>>>>>>>> FSM (keeping the same transition names to show the dependancy.)
>>>>>>>>>>
>>>>>>>>>> And I guess there is a typo at "odp_timeout_freee().
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks.  I'll fix that in the next version.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Christophe
>>>>>>>>>>
>>>>>>>>>> On 7 May 2016 at 18:15, Bill Fischofer <bill.fischo...@linaro.org
>>>>>>>>>> > wrote:
>>>>>>>>>>
>>>>>>>>>>> Signed-off-by: Bill Fischofer <bill.fischo...@linaro.org>
>>>>>>>>>>> ---
>>>>>>>>>>>  doc/images/.gitignore       |  1 +
>>>>>>>>>>>  doc/images/timer_fsm.gv     | 38
>>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++
>>>>>>>>>>>  doc/users-guide/Makefile.am |  1 +
>>>>>>>>>>>  3 files changed, 40 insertions(+)
>>>>>>>>>>>  create mode 100644 doc/images/timer_fsm.gv
>>>>>>>>>>>
>>>>>>>>>>> diff --git a/doc/images/.gitignore b/doc/images/.gitignore
>>>>>>>>>>> index a19aa75..72cf7ec 100644
>>>>>>>>>>> --- a/doc/images/.gitignore
>>>>>>>>>>> +++ b/doc/images/.gitignore
>>>>>>>>>>> @@ -1,2 +1,3 @@
>>>>>>>>>>>  resource_management.svg
>>>>>>>>>>>  pktio_fsm.svg
>>>>>>>>>>> +timer_fsm.svg
>>>>>>>>>>> diff --git a/doc/images/timer_fsm.gv b/doc/images/timer_fsm.gv
>>>>>>>>>>> new file mode 100644
>>>>>>>>>>> index 0000000..f8cb21a
>>>>>>>>>>> --- /dev/null
>>>>>>>>>>> +++ b/doc/images/timer_fsm.gv
>>>>>>>>>>> @@ -0,0 +1,38 @@
>>>>>>>>>>> +digraph timer_state_machine {
>>>>>>>>>>> +       rankdir=LR;
>>>>>>>>>>> +       size="12,20";
>>>>>>>>>>> +       node [fontsize=28];
>>>>>>>>>>> +       edge [fontsize=28];
>>>>>>>>>>> +       node [shape=doublecircle]; Timer_Unalloc
>>>>>>>>>>> +                                  Timeout_Unalloc
>>>>>>>>>>> +                                  Timeout_Delivered;
>>>>>>>>>>> +        node [shape=rectangle]; Timeout_Queued;
>>>>>>>>>>> +       node [shape=circle];
>>>>>>>>>>> +       Timer_Unalloc -> Timer_Alloc [label="odp_timer_alloc()"];
>>>>>>>>>>> +       Timer_Alloc -> Timer_Unalloc [label="odp_timer_free()"];
>>>>>>>>>>> +       Timer_Alloc -> Timer_Set [label="odp_timer_set_abs()"];
>>>>>>>>>>> +       Timer_Alloc -> Timer_Set [label="odp_timer_set_rel()"];
>>>>>>>>>>> +       Timer_Set -> Timer_Alloc [label="odp_timer_cancel()"];
>>>>>>>>>>> +       Timer_Set -> Timeout_Alloc
>>>>>>>>>>> +                       [label="odp_timer_cancel()"
>>>>>>>>>>> constraint=false];
>>>>>>>>>>> +       Timer_Set -> Timeout_Queued [label="=>odp_queue_enq()"];
>>>>>>>>>>> +       Timeout_Queued -> Timeout_Delivered
>>>>>>>>>>> [label="odp_schedule()"];
>>>>>>>>>>> +       Timeout_Unalloc -> Timeout_Alloc
>>>>>>>>>>> +                        [label="odp_timeout_alloc()"
>>>>>>>>>>> constraint=false];
>>>>>>>>>>> +       Timeout_Alloc -> Timeout_Unalloc
>>>>>>>>>>> +                        [label="odp_timeout_free()"
>>>>>>>>>>> constraint=false];
>>>>>>>>>>> +       Timeout_Alloc -> Timer_Set
>>>>>>>>>>> +                        [label="odp_timer_set_abs()"
>>>>>>>>>>> constraint=false];
>>>>>>>>>>> +       Timeout_Alloc -> Timer_Set
>>>>>>>>>>> +                        [label="odp_timer_set_rel()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timer_Unalloc
>>>>>>>>>>> [label="odp_timer_free()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timer_Set
>>>>>>>>>>> [label="odp_timer_set_abs()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timer_Set
>>>>>>>>>>> [label="odp_timer_set_rel()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timeout_Delivered
>>>>>>>>>>> +                         [label="odp_timeout_from_event()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timeout_Delivered
>>>>>>>>>>> +                         [label="odp_timeout_timer()"];
>>>>>>>>>>> +       Timeout_Delivered -> Timeout_Unalloc
>>>>>>>>>>> +                         [label="odp_event_free() /
>>>>>>>>>>> odp_timeout_freee()"
>>>>>>>>>>> +                         constraint=false];
>>>>>>>>>>> +}
>>>>>>>>>>> diff --git a/doc/users-guide/Makefile.am
>>>>>>>>>>> b/doc/users-guide/Makefile.am
>>>>>>>>>>> index 74caa96..6bb0131 100644
>>>>>>>>>>> --- a/doc/users-guide/Makefile.am
>>>>>>>>>>> +++ b/doc/users-guide/Makefile.am
>>>>>>>>>>> @@ -30,6 +30,7 @@ IMAGES = $(top_srcdir)/doc/images/overview.svg
>>>>>>>>>>> \
>>>>>>>>>>>          $(top_srcdir)/doc/images/release_git.svg \
>>>>>>>>>>>          $(top_srcdir)/doc/images/segment.svg \
>>>>>>>>>>>          $(top_srcdir)/doc/images/simple_release_git.svg \
>>>>>>>>>>> +        $(top_srcdir)/doc/images/timer_fsm.svg \
>>>>>>>>>>>          $(top_srcdir)/doc/images/tm_hierarchy.svg \
>>>>>>>>>>>          $(top_srcdir)/doc/images/tm_node.svg
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> 2.5.0
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> lng-odp mailing list
>>>>>>>>>>> lng-odp@lists.linaro.org
>>>>>>>>>>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to