On 4 September 2015 at 15:36, Bill Fischofer <bill.fischo...@linaro.org>
wrote:

> That's saying that a specific worker has knowledge of what events it
> should be receiving and when.  The whole point of event scheduling is that
> an individual worker thread is not aware of such considerations, but simply
> process events that are scheduled to it.
>
> What you're describing is an application that is polling rather than
> scheduling.  To treat odp_schedule() as a type of poll sort of misses the
> point of having an event model.
>
I am with you here Bill.


>
> But enough digression.  Sorry to sidetrack this thread. :)
>
> On Fri, Sep 4, 2015 at 8:20 AM, Nicolas Morey-Chaisemartin <
> nmo...@kalray.eu> wrote:
>
>> It could send some packet or simply handle an error case (packet should
>> have arrived now, something went wrong?)
>>
> Use timers/timeouts for that.

As Bill writes, an individual worker thread does not have any global
knowledge of the application state so a timeout from odp_schedule() doesn't
mean anything.



>> All this could be probably implemented by the user with timers and make
>> the code better, but programmers are lazy and
>> variable timeout is very easy to use and much lighter than creating a
>> pool of timers and so on...
>>
>>
>> On 09/04/2015 03:13 PM, Bill Fischofer wrote:
>>
>> My point wasn't about the validation test but about the utility of the
>> variable timeout feature of the API itself.  Can anyone really come up with
>> a use case where Wait for X, 2X, 3X have distinct meanings such that a
>> worker thread would choose one vs. another?  In a portable manner?  Exactly
>> what will the worker thread do after waiting if it returns empty handed
>> other than wait again?
>>
>> On Fri, Sep 4, 2015 at 4:56 AM, Ivan Khoronzhuk <
>> ivan.khoronz...@linaro.org> wrote:
>>
>>> Bill,
>>>
>>> On 04.09.15 05:46, Bill Fischofer wrote:
>>>
>>>> The time waiting is of dubious value (and portability) in a system with
>>>> dedicated worker threads. What else are they planning to do? Is that the
>>>> best design for the application?  There are valid common uses for
>>>> ODP_SCHED_WAIT and ODP_SCHED_NO_WAIT.  Everything else is questionable.
>>>> Periodic processing should be done via timers that trigger events rather
>>>> than by guesswork on the part of workers.
>>>>
>>>
>>> I tend to leave it as proposed Nicolas to cover existent examples.
>>> It cannot touch cases where timers are used, I guess.
>>>
>>> if (ns && !cycle)
>>>         cycle = 1;
>>>
>>> ODP_SCHED_NO_WAIT (1) like check once, so if we passed ~ 1ns we wanted
>>> to schedule at least once.
>>> Currently it can lead to wait forever ODP_SCHED_WAIT (0).
>>>
>>>
>>>> On Thu, Sep 3, 2015 at 1:28 AM, Ivan Khoronzhuk <
>>>> <ivan.khoronz...@linaro.org>ivan.khoronz...@linaro.org <mailto:
>>>> ivan.khoronz...@linaro.org>> wrote:
>>>>
>>>>
>>>>
>>>>     On 03.09.15 09:20, Nicolas Morey-Chaisemartin wrote:
>>>>
>>>>
>>>>
>>>>         On 09/02/2015 11:16 PM, Ivan Khoronzhuk wrote:
>>>>
>>>>
>>>>
>>>>             On 02.09.15 12:42, Nicolas Morey-Chaisemartin wrote:
>>>>
>>>>
>>>>                 On 08/26/2015 05:47 PM, Ivan Khoronzhuk wrote:
>>>>
>>>>
>>>>
>>>>                     On 26.08.15 18:22, Stuart Haslam wrote:
>>>>
>>>>                         On Wed, Aug 26, 2015 at 06:11:13PM +0300, Ivan
>>>> Khoronzhuk wrote:
>>>>
>>>>                             It's needed because time resolution can be
>>>> a little more than 1ns
>>>>                             and in this case odp_schedule_wait_time(1)
>>>> returns 0, and test
>>>>                             generates warn w/o reason. So increase
>>>> scheduler wait time check
>>>>                             from 1ns to 100ns.
>>>>
>>>>                             It's hard to imagine time source with
>>>> resolution more than 100ns,
>>>>                             so every implementation can return positive
>>>> value from
>>>>                             odp_schedule_wait_time(). In case if
>>>> resolution is more than 100ns
>>>>                             it's normal to warn about it at validation
>>>> stage,
>>>>
>>>>
>>>>                         The wait parameter is documented as the
>>>> *minimum* time to wait for an
>>>>                         event so the existing check looks OK to me.
>>>> Implementations with a lower
>>>>                         resolution should round up.
>>>>
>>>>
>>>>                     It defined as "minimum" time to wait for
>>>> odp_schedule and others,
>>>>                     for odp_schedule_wait_time() it's not defined as
>>>> minimum, it's simple
>>>>                     convert function.
>>>>
>>>>                     Not shure, but any of the functions I saw in
>>>> linux-generic doesn't round ticks up.
>>>>                     It seems that it was decided to allow application
>>>> to do it, if needed.
>>>>
>>>>                     But if so, we have much more to change ).
>>>>
>>>>                     In case if you are right, linux-generic
>>>> implementation should be corrected,
>>>>                     as it doesn't round it up.
>>>>
>>>>                     Thanks.
>>>>
>>>>                 I ran into this issue with our port as our clock are <
>>>> 1GHz.
>>>>                 So 1 ns is < 1 cycle which tends to break a few things
>>>> on the linux generic port.
>>>>
>>>>                 I fix this particular issue like this:
>>>>                 uint64_t odp_schedule_wait_time(uint64_t ns)
>>>>                 {
>>>>                        uint64_t cycle = odp_time_ns_to_cycles(ns);
>>>>                        if(cycle == 0)
>>>>                            cycle = 1;
>>>>                        return cycle;
>>>>                 }
>>>>
>>>>                 Not the nicest patch but it works.
>>>>                 The test should probably be changed to if(ns && !cycle)
>>>> so ns=0 returns 0;
>>>>
>>>>             Yes.
>>>>
>>>>             As said Stuart it may cause collisions with ODP_SCHED_WAIT
>>>> (0)
>>>>             and ODP_SCHED_NO_WAIT (1)
>>>>
>>>>             I will correct it a little later.
>>>>
>>>>         I don't think the collision with ODP_SCHED_NO_WAIT is too bad.
>>>> We only fall into this case if a cycle is larger than 1 ns so waiting not
>>>> waiting or waiting less thana cycle is close to the same thing.
>>>>
>>>>
>>>>     Maybe you are right.
>>>>
>>>>     --
>>>>     Regards,
>>>>     Ivan Khoronzhuk
>>>>
>>>>     _______________________________________________
>>>>     lng-odp mailing list
>>>>     lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>>>>     https://lists.linaro.org/mailman/listinfo/lng-odp
>>>>
>>>>
>>>>
>>> --
>>> Regards,
>>> Ivan Khoronzhuk
>>>
>>
>>
>>
>
> _______________________________________________
> 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