> -----Original Message-----
> From: EXT Ivan Khoronzhuk [mailto:ivan.khoronz...@linaro.org]
> Sent: Wednesday, September 16, 2015 11:19 AM
> To: Savolainen, Petri (Nokia - FI/Espoo); lng-odp@lists.linaro.org
> Subject: Re: [lng-odp] [PATCH v2 5/5] performance: odp_pktio_perf: fix
> potential overflow for burst_gap
> 
> Petri,
> 
> On 16.09.15 10:02, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> >
> >
> >> -----Original Message-----
> >> From: EXT Ivan Khoronzhuk [mailto:ivan.khoronz...@linaro.org]
> >> Sent: Tuesday, September 15, 2015 5:07 PM
> >> To: Savolainen, Petri (Nokia - FI/Espoo); lng-odp@lists.linaro.org
> >> Subject: Re: [lng-odp] [PATCH v2 5/5] performance: odp_pktio_perf:
> fix
> >> potential overflow for burst_gap
> >>
> >> Petri,
> >>
> >> On 15.09.15 16:01, Ivan Khoronzhuk wrote:
> >>>
> >>>
> >>> On 15.09.15 15:54, Ivan Khoronzhuk wrote:
> >>>>
> >>>>
> >>>> On 15.09.15 15:45, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: EXT Ivan Khoronzhuk [mailto:ivan.khoronz...@linaro.org]
> >>>>>> Sent: Tuesday, September 15, 2015 3:08 PM
> >>>>>> To: Savolainen, Petri (Nokia - FI/Espoo); lng-
> o...@lists.linaro.org
> >>>>>> Subject: Re: [lng-odp] [PATCH v2 5/5] performance:
> odp_pktio_perf:
> >> fix
> >>>>>> potential overflow for burst_gap
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 15.09.15 14:42, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On
> >> Behalf Of
> >>>>>>>> EXT Ivan Khoronzhuk
> >>>>>>>> Sent: Friday, September 11, 2015 1:05 PM
> >>>>>>>> To: lng-odp@lists.linaro.org
> >>>>>>>> Subject: [lng-odp] [PATCH v2 5/5] performance: odp_pktio_perf:
> >> fix
> >>>>>>>> potential overflow for burst_gap
> >>>>>>>>
> >>>>>>>> The direct comparing of "cur_cycles" and "next_tx_cycles" is
> not
> >>>>>>>> valid, as "next_tx_cycles" can be overflowed and comparison
> will
> >>>>>>>> give wrong result. So use odp_time_diff_cycles() for that, as
> it
> >>>>>>>> takes in account ticks overflow.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Ivan Khoronzhuk <ivan.khoronz...@linaro.org>
> >>>>>>>> ---
> >>>>>>>>     test/performance/odp_pktio_perf.c | 9 +++++----
> >>>>>>>>     1 file changed, 5 insertions(+), 4 deletions(-)
> >>>>>>>>
> >>>>>>>> diff --git a/test/performance/odp_pktio_perf.c
> >>>>>>>> b/test/performance/odp_pktio_perf.c
> >>>>>>>> index ac32b15..85ef2bc 100644
> >>>>>>>> --- a/test/performance/odp_pktio_perf.c
> >>>>>>>> +++ b/test/performance/odp_pktio_perf.c
> >>>>>>>> @@ -303,7 +303,7 @@ static void *run_thread_tx(void *arg)
> >>>>>>>>         int thr_id;
> >>>>>>>>         odp_queue_t outq;
> >>>>>>>>         pkt_tx_stats_t *stats;
> >>>>>>>> -    uint64_t next_tx_cycles, start_cycles, cur_cycles,
> >> send_duration;
> >>>>>>>> +    uint64_t burst_start_cycles, start_cycles, cur_cycles,
> >>>>>>>> send_duration;
> >>>>>>>>         uint64_t burst_gap_cycles;
> >>>>>>>>         uint32_t batch_len;
> >>>>>>>>         int unsent_pkts = 0;
> >>>>>>>> @@ -334,11 +334,12 @@ static void *run_thread_tx(void *arg)
> >>>>>>>>
> >>>>>>>>         cur_cycles     = odp_time_cycles();
> >>>>>>>>         start_cycles   = cur_cycles;
> >>>>>>>> -    next_tx_cycles = cur_cycles;
> >>>>>>>> +    burst_start_cycles = odp_time_diff_cycles(cur_cycles,
> >>>>>>>> burst_gap_cycles);
> >>>>>>>
> >>>>>>> Shouldn't this be:
> >>>>>>>
> >>>>>>> burst_start_cycles = cur_cycles + burst_gap_cycles;
> >>>>>>>
> >>>>>>> ,which works as long as cycle count wraps at UINT64_MAX. Maybe
> we
> >>>>>> need a cpu.h API for summing two values with correct wrapping.
> >>>>>> It's initialization for burst gap, which is changing while
> >>>>>> send_duration.
> >>>>>> Current algorithm don't wait "burst gap" at first iteration, my
> >>>>>> intention to not change it.
> >>>>>> So I've used diff, in another case it waits one init gap.
> >>>>>> In case of cur_cycles + burst_gap_cycles it waits 2 x burst_gap.
> >> So
> >>>>>> it's not correct.
> >>>>>> I suppose here shouldn't be functional changes.
> >>>>>> The cpu API doesn't have sum function and is not for this case,
> we
> >> need
> >>>>>> time here, that is
> >>>>>> Time API is indented for. The new Time API is going to be added
> >> after
> >>>>>> this series and will
> >>>>>> contain sum function which will replace "+" on odp_time_sum().
> >> Current
> >>>>>> API supposes that "+"
> >>>>>> correctly handles UINT64_MAX wrap and doesn't contain sum
> >> function.
> >>>>>
> >>>>>
> >>>>> For example:
> >>>>>
> >>>>> burst_gap_cycles = 1k; // e.g. 1msec
> >>>>> cur_cycles = 1M;  // wraps at 10M
> >>>>>
> >>>>> burst_start_cycles = odp_time_diff_cycles(cur_cycles,
> >> burst_gap_cycles);
> >>>>>
> >>>>>
> >>>>> burst_start_cycles = 10M - 1M + 1k = 9 001 000
> >>>>>
> >>>>
> >>>> I've checked it some time ago and it was working, I remember I
> >> corrected this, strange.
> >>>> Seems I forgot it to swap.
> >>>>
> >>>
> >>> Let me check it again.
> >>> And maybe I will revise loop a little.
> >>> I dislike this diff at init also.
> >>
> >> Yes, I forgot to swap  burst_gap_cycles and cur_cycles.
> >> so odp_time_diff_cycles(cur_cycles, burst_gap_cycles) ->
> >> odp_time_diff_cycles(burst_gap_cycles, cur_cycles);
> >> Are you OK with this? I will update it after some review of other
> >> patches from this series.
> >>
> >> Seems, it's simplest way to not wait at first iteration and not use
> >> additional vars
> >> or comparison with start time.
> >
> >
> > I think it works correctly only when cur_cycles > burst_gap_cycles
> (which is likely but there's no guarantees).
> 
> In case of cur_cycles < burst_gap_cycles it should work.
> 
> burst_start_cycles = MAX - gap + cur.
> 
> For instance:
> gap = 100;
> cur = 5;
> 
> burst_start_cycles = MAX - 100 + 5 = MAX - 95;
> After MAX it wraps to 0 + 5, so 95 + 5 = 100; That's correct.
> No matter we diff range or counter from cur_time,
> it will be correct, second argument cannot wrap.
> 
> So, if you are OK, we can leave it as simplest fix.


It's OK.

-Petri

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to