* [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss. @ 2020-03-13 8:27 yufengmx 2020-03-13 8:27 ` [dts] [PATCH V1 1/1] " yufengmx 2020-03-16 2:25 ` [dts] [PATCH V1 0/1] " Mo, YufengX 0 siblings, 2 replies; 7+ messages in thread From: yufengmx @ 2020-03-13 8:27 UTC (permalink / raw) To: dts, lijuan.tu, yingyax.han; +Cc: yufengmx measure_rfc2544_dichotomy/loss rate add actual line rate return value. yufengmx (1): framework/pktgen: add actual line rate return for loss. framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) -- 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [dts] [PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. 2020-03-13 8:27 [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss yufengmx @ 2020-03-13 8:27 ` yufengmx 2020-03-16 2:25 ` [dts] [PATCH V1 0/1] " Mo, YufengX 1 sibling, 0 replies; 7+ messages in thread From: yufengmx @ 2020-03-13 8:27 UTC (permalink / raw) To: dts, lijuan.tu, yingyax.han; +Cc: yufengmx measure_rfc2544_dichotomy/loss rate add actual line rate return value. Signed-off-by: yufengmx <yufengx.mo@intel.com> --- framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py index 7e1ff48..bee703e 100644 --- a/framework/pktgen_base.py +++ b/framework/pktgen_base.py @@ -263,6 +263,7 @@ class PacketGenerator(object): """ delay = options.get('delay') duration = options.get('duration') or 10 + throughput_stat_flag = options.get('throughput_stat_flag') or False self._prepare_transmission(stream_ids=stream_ids) # start warm up traffic self.__warm_up_pktgen(stream_ids, options, delay) @@ -270,6 +271,8 @@ class PacketGenerator(object): self._start_transmission(stream_ids, options) # keep traffic within a duration time time.sleep(duration) + if throughput_stat_flag: + _throughput_stats = self.__get_single_throughput_statistic(stream_ids) self._stop_transmission(None) result = {} used_rx_port = [] @@ -287,7 +290,10 @@ class PacketGenerator(object): if loss_rate < 0: loss_rate = 0 result[port_id] = (loss_rate, tx_pkts, rx_pkts) - return result + if throughput_stat_flag: + return result, _throughput_stats + else: + return result def measure_loss(self, stream_ids=[], options={}): ''' @@ -491,6 +497,7 @@ class PacketGenerator(object): accuracy = options.get('accuracy') or 0.001 permit_loss_rate = options.get('pdr') or 0.0 duration = options.get('duration') or 10.0 + throughput_stat_flag = options.get('throughput_stat_flag') or False # start warm up traffic delay = options.get('delay') _options = {'duration': duration} @@ -505,10 +512,14 @@ class PacketGenerator(object): traffic_rate_min = min_rate while True: # run loss rate testing - _options = {'duration': duration} + _options = { + 'throughput_stat_flag': throughput_stat_flag, + 'duration': duration, } result = self._measure_loss(stream_ids, _options) loss_rate_table.append([rate, result]) - status = self._check_loss_rate(result, permit_loss_rate) + status = self._check_loss_rate( + result[0] if throughput_stat_flag else result, + permit_loss_rate) # if upper bound rate percent hit, quit the left flow if rate == max_rate and status: hit_result = result @@ -528,16 +539,28 @@ class PacketGenerator(object): # set stream rate percent to custom value self._set_stream_rate_percent(rate) - if not hit_result: - msg = ('expected permit loss rate <{0}> ' - 'not between rate {1} and rate {2}').format( - permit_loss_rate, max_rate, min_rate) - self.logger.error(msg) - self.logger.info(pformat(loss_rate_table)) - ret_value = 0, result[0][1], result[0][2] + if throughput_stat_flag: + if not hit_result[0]: + msg = ('expected permit loss rate <{0}> ' + 'not between rate {1} and rate {2}').format( + permit_loss_rate, max_rate, min_rate) + self.logger.error(msg) + self.logger.info(pformat(loss_rate_table)) + ret_value = 0, result[0][0][1], result[0][0][2], 0 + else: + self.logger.debug(pformat(loss_rate_table)) + ret_value = rate, hit_result[0][0][1], hit_result[0][0][2], hit_result[1][1] else: - self.logger.debug(pformat(loss_rate_table)) - ret_value = rate, hit_result[0][1], hit_result[0][2] + if not hit_result: + msg = ('expected permit loss rate <{0}> ' + 'not between rate {1} and rate {2}').format( + permit_loss_rate, max_rate, min_rate) + self.logger.error(msg) + self.logger.info(pformat(loss_rate_table)) + ret_value = 0, result[0][1], result[0][2] + else: + self.logger.debug(pformat(loss_rate_table)) + ret_value = rate, hit_result[0][1], hit_result[0][2] self.logger.info("zero loss rate is %f" % rate) return ret_value -- 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss. 2020-03-13 8:27 [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss yufengmx 2020-03-13 8:27 ` [dts] [PATCH V1 1/1] " yufengmx @ 2020-03-16 2:25 ` Mo, YufengX 1 sibling, 0 replies; 7+ messages in thread From: Mo, YufengX @ 2020-03-16 2:25 UTC (permalink / raw) To: dts, Tu, Lijuan, Han, YingyaX Ignore this version. Version 2 upstreamed. > -----Original Message----- > From: Mo, YufengX > Sent: Friday, March 13, 2020 4:27 PM > To: dts@dpdk.org; Tu, Lijuan <lijuan.tu@intel.com>; Han, YingyaX <yingyax.han@intel.com> > Cc: Mo, YufengX <yufengx.mo@intel.com> > Subject: [dts][PATCH V1 0/1] framework/pktgen: add actual line rate return for loss. > > measure_rfc2544_dichotomy/loss rate add actual line rate return value. > > yufengmx (1): > framework/pktgen: add actual line rate return for loss. > > framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++---------- > 1 file changed, 35 insertions(+), 12 deletions(-) > > -- > 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss. @ 2020-03-16 2:28 yufengmx 2020-03-16 2:28 ` [dts] [PATCH V1 1/1] " yufengmx 0 siblings, 1 reply; 7+ messages in thread From: yufengmx @ 2020-03-16 2:28 UTC (permalink / raw) To: dts, lijuan.tu, yingyax.han; +Cc: yufengmx measure_rfc2544_dichotomy/loss rate add actual line rate return value. v2: - add result Null type check. yufengmx (1): framework/pktgen: add actual line rate return for loss. framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) -- 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [dts] [PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. 2020-03-16 2:28 yufengmx @ 2020-03-16 2:28 ` yufengmx 2020-03-16 2:30 ` Tu, Lijuan 2020-03-20 8:04 ` Tu, Lijuan 0 siblings, 2 replies; 7+ messages in thread From: yufengmx @ 2020-03-16 2:28 UTC (permalink / raw) To: dts, lijuan.tu, yingyax.han; +Cc: yufengmx measure_rfc2544_dichotomy/loss rate add actual line rate return value. Signed-off-by: yufengmx <yufengx.mo@intel.com> --- framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py index 7e1ff48..049142f 100644 --- a/framework/pktgen_base.py +++ b/framework/pktgen_base.py @@ -263,6 +263,7 @@ class PacketGenerator(object): """ delay = options.get('delay') duration = options.get('duration') or 10 + throughput_stat_flag = options.get('throughput_stat_flag') or False self._prepare_transmission(stream_ids=stream_ids) # start warm up traffic self.__warm_up_pktgen(stream_ids, options, delay) @@ -270,6 +271,8 @@ class PacketGenerator(object): self._start_transmission(stream_ids, options) # keep traffic within a duration time time.sleep(duration) + if throughput_stat_flag: + _throughput_stats = self.__get_single_throughput_statistic(stream_ids) self._stop_transmission(None) result = {} used_rx_port = [] @@ -287,7 +290,10 @@ class PacketGenerator(object): if loss_rate < 0: loss_rate = 0 result[port_id] = (loss_rate, tx_pkts, rx_pkts) - return result + if throughput_stat_flag: + return result, _throughput_stats + else: + return result def measure_loss(self, stream_ids=[], options={}): ''' @@ -491,6 +497,7 @@ class PacketGenerator(object): accuracy = options.get('accuracy') or 0.001 permit_loss_rate = options.get('pdr') or 0.0 duration = options.get('duration') or 10.0 + throughput_stat_flag = options.get('throughput_stat_flag') or False # start warm up traffic delay = options.get('delay') _options = {'duration': duration} @@ -505,10 +512,14 @@ class PacketGenerator(object): traffic_rate_min = min_rate while True: # run loss rate testing - _options = {'duration': duration} + _options = { + 'throughput_stat_flag': throughput_stat_flag, + 'duration': duration, } result = self._measure_loss(stream_ids, _options) loss_rate_table.append([rate, result]) - status = self._check_loss_rate(result, permit_loss_rate) + status = self._check_loss_rate( + result[0] if throughput_stat_flag else result, + permit_loss_rate) # if upper bound rate percent hit, quit the left flow if rate == max_rate and status: hit_result = result @@ -528,16 +539,28 @@ class PacketGenerator(object): # set stream rate percent to custom value self._set_stream_rate_percent(rate) - if not hit_result: - msg = ('expected permit loss rate <{0}> ' - 'not between rate {1} and rate {2}').format( - permit_loss_rate, max_rate, min_rate) - self.logger.error(msg) - self.logger.info(pformat(loss_rate_table)) - ret_value = 0, result[0][1], result[0][2] + if throughput_stat_flag: + if not hit_result or not hit_result[0]: + msg = ('expected permit loss rate <{0}> ' + 'not between rate {1} and rate {2}').format( + permit_loss_rate, max_rate, min_rate) + self.logger.error(msg) + self.logger.info(pformat(loss_rate_table)) + ret_value = 0, result[0][0][1], result[0][0][2], 0 + else: + self.logger.debug(pformat(loss_rate_table)) + ret_value = rate, hit_result[0][0][1], hit_result[0][0][2], hit_result[1][1] else: - self.logger.debug(pformat(loss_rate_table)) - ret_value = rate, hit_result[0][1], hit_result[0][2] + if not hit_result: + msg = ('expected permit loss rate <{0}> ' + 'not between rate {1} and rate {2}').format( + permit_loss_rate, max_rate, min_rate) + self.logger.error(msg) + self.logger.info(pformat(loss_rate_table)) + ret_value = 0, result[0][1], result[0][2] + else: + self.logger.debug(pformat(loss_rate_table)) + ret_value = rate, hit_result[0][1], hit_result[0][2] self.logger.info("zero loss rate is %f" % rate) return ret_value -- 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dts] [PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. 2020-03-16 2:28 ` [dts] [PATCH V1 1/1] " yufengmx @ 2020-03-16 2:30 ` Tu, Lijuan 2020-03-16 2:32 ` Mo, YufengX 2020-03-20 8:04 ` Tu, Lijuan 1 sibling, 1 reply; 7+ messages in thread From: Tu, Lijuan @ 2020-03-16 2:30 UTC (permalink / raw) To: Mo, YufengX, dts, Han, YingyaX Is this the V2 ? sorry , I am confused by tag and another mail. > -----Original Message----- > From: Mo, YufengX > Sent: Monday, March 16, 2020 10:29 AM > To: dts@dpdk.org; Tu, Lijuan <lijuan.tu@intel.com>; Han, YingyaX > <yingyax.han@intel.com> > Cc: Mo, YufengX <yufengx.mo@intel.com> > Subject: [dts][PATCH V1 1/1] framework/pktgen: add actual line rate return > for loss. > > > measure_rfc2544_dichotomy/loss rate add actual line rate return value. > > Signed-off-by: yufengmx <yufengx.mo@intel.com> > --- > framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++--------- > - > 1 file changed, 35 insertions(+), 12 deletions(-) > > diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py index > 7e1ff48..049142f 100644 > --- a/framework/pktgen_base.py > +++ b/framework/pktgen_base.py > @@ -263,6 +263,7 @@ class PacketGenerator(object): > """ > delay = options.get('delay') > duration = options.get('duration') or 10 > + throughput_stat_flag = options.get('throughput_stat_flag') or > + False > self._prepare_transmission(stream_ids=stream_ids) > # start warm up traffic > self.__warm_up_pktgen(stream_ids, options, delay) @@ -270,6 +271,8 > @@ class PacketGenerator(object): > self._start_transmission(stream_ids, options) > # keep traffic within a duration time > time.sleep(duration) > + if throughput_stat_flag: > + _throughput_stats = > + self.__get_single_throughput_statistic(stream_ids) > self._stop_transmission(None) > result = {} > used_rx_port = [] > @@ -287,7 +290,10 @@ class PacketGenerator(object): > if loss_rate < 0: > loss_rate = 0 > result[port_id] = (loss_rate, tx_pkts, rx_pkts) > - return result > + if throughput_stat_flag: > + return result, _throughput_stats > + else: > + return result > > def measure_loss(self, stream_ids=[], options={}): > ''' > @@ -491,6 +497,7 @@ class PacketGenerator(object): > accuracy = options.get('accuracy') or 0.001 > permit_loss_rate = options.get('pdr') or 0.0 > duration = options.get('duration') or 10.0 > + throughput_stat_flag = options.get('throughput_stat_flag') or > + False > # start warm up traffic > delay = options.get('delay') > _options = {'duration': duration} @@ -505,10 +512,14 @@ class > PacketGenerator(object): > traffic_rate_min = min_rate > while True: > # run loss rate testing > - _options = {'duration': duration} > + _options = { > + 'throughput_stat_flag': throughput_stat_flag, > + 'duration': duration, } > result = self._measure_loss(stream_ids, _options) > loss_rate_table.append([rate, result]) > - status = self._check_loss_rate(result, permit_loss_rate) > + status = self._check_loss_rate( > + result[0] if throughput_stat_flag else result, > + permit_loss_rate) > # if upper bound rate percent hit, quit the left flow > if rate == max_rate and status: > hit_result = result > @@ -528,16 +539,28 @@ class PacketGenerator(object): > # set stream rate percent to custom value > self._set_stream_rate_percent(rate) > > - if not hit_result: > - msg = ('expected permit loss rate <{0}> ' > - 'not between rate {1} and rate {2}').format( > - permit_loss_rate, max_rate, min_rate) > - self.logger.error(msg) > - self.logger.info(pformat(loss_rate_table)) > - ret_value = 0, result[0][1], result[0][2] > + if throughput_stat_flag: > + if not hit_result or not hit_result[0]: > + msg = ('expected permit loss rate <{0}> ' > + 'not between rate {1} and rate {2}').format( > + permit_loss_rate, max_rate, min_rate) > + self.logger.error(msg) > + self.logger.info(pformat(loss_rate_table)) > + ret_value = 0, result[0][0][1], result[0][0][2], 0 > + else: > + self.logger.debug(pformat(loss_rate_table)) > + ret_value = rate, hit_result[0][0][1], > + hit_result[0][0][2], hit_result[1][1] > else: > - self.logger.debug(pformat(loss_rate_table)) > - ret_value = rate, hit_result[0][1], hit_result[0][2] > + if not hit_result: > + msg = ('expected permit loss rate <{0}> ' > + 'not between rate {1} and rate {2}').format( > + permit_loss_rate, max_rate, min_rate) > + self.logger.error(msg) > + self.logger.info(pformat(loss_rate_table)) > + ret_value = 0, result[0][1], result[0][2] > + else: > + self.logger.debug(pformat(loss_rate_table)) > + ret_value = rate, hit_result[0][1], hit_result[0][2] > self.logger.info("zero loss rate is %f" % rate) > > return ret_value > -- > 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dts] [PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. 2020-03-16 2:30 ` Tu, Lijuan @ 2020-03-16 2:32 ` Mo, YufengX 0 siblings, 0 replies; 7+ messages in thread From: Mo, YufengX @ 2020-03-16 2:32 UTC (permalink / raw) To: Tu, Lijuan, dts, Han, YingyaX Yes, I forgot to change tag. > -----Original Message----- > From: Tu, Lijuan > Sent: Monday, March 16, 2020 10:31 AM > To: Mo, YufengX <yufengx.mo@intel.com>; dts@dpdk.org; Han, YingyaX <yingyax.han@intel.com> > Subject: RE: [dts][PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. > > Is this the V2 ? sorry , I am confused by tag and another mail. > > > -----Original Message----- > > From: Mo, YufengX > > Sent: Monday, March 16, 2020 10:29 AM > > To: dts@dpdk.org; Tu, Lijuan <lijuan.tu@intel.com>; Han, YingyaX > > <yingyax.han@intel.com> > > Cc: Mo, YufengX <yufengx.mo@intel.com> > > Subject: [dts][PATCH V1 1/1] framework/pktgen: add actual line rate return > > for loss. > > > > > > measure_rfc2544_dichotomy/loss rate add actual line rate return value. > > > > Signed-off-by: yufengmx <yufengx.mo@intel.com> > > --- > > framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++--------- > > - > > 1 file changed, 35 insertions(+), 12 deletions(-) > > > > diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py index > > 7e1ff48..049142f 100644 > > --- a/framework/pktgen_base.py > > +++ b/framework/pktgen_base.py > > @@ -263,6 +263,7 @@ class PacketGenerator(object): > > """ > > delay = options.get('delay') > > duration = options.get('duration') or 10 > > + throughput_stat_flag = options.get('throughput_stat_flag') or > > + False > > self._prepare_transmission(stream_ids=stream_ids) > > # start warm up traffic > > self.__warm_up_pktgen(stream_ids, options, delay) @@ -270,6 +271,8 > > @@ class PacketGenerator(object): > > self._start_transmission(stream_ids, options) > > # keep traffic within a duration time > > time.sleep(duration) > > + if throughput_stat_flag: > > + _throughput_stats = > > + self.__get_single_throughput_statistic(stream_ids) > > self._stop_transmission(None) > > result = {} > > used_rx_port = [] > > @@ -287,7 +290,10 @@ class PacketGenerator(object): > > if loss_rate < 0: > > loss_rate = 0 > > result[port_id] = (loss_rate, tx_pkts, rx_pkts) > > - return result > > + if throughput_stat_flag: > > + return result, _throughput_stats > > + else: > > + return result > > > > def measure_loss(self, stream_ids=[], options={}): > > ''' > > @@ -491,6 +497,7 @@ class PacketGenerator(object): > > accuracy = options.get('accuracy') or 0.001 > > permit_loss_rate = options.get('pdr') or 0.0 > > duration = options.get('duration') or 10.0 > > + throughput_stat_flag = options.get('throughput_stat_flag') or > > + False > > # start warm up traffic > > delay = options.get('delay') > > _options = {'duration': duration} @@ -505,10 +512,14 @@ class > > PacketGenerator(object): > > traffic_rate_min = min_rate > > while True: > > # run loss rate testing > > - _options = {'duration': duration} > > + _options = { > > + 'throughput_stat_flag': throughput_stat_flag, > > + 'duration': duration, } > > result = self._measure_loss(stream_ids, _options) > > loss_rate_table.append([rate, result]) > > - status = self._check_loss_rate(result, permit_loss_rate) > > + status = self._check_loss_rate( > > + result[0] if throughput_stat_flag else result, > > + permit_loss_rate) > > # if upper bound rate percent hit, quit the left flow > > if rate == max_rate and status: > > hit_result = result > > @@ -528,16 +539,28 @@ class PacketGenerator(object): > > # set stream rate percent to custom value > > self._set_stream_rate_percent(rate) > > > > - if not hit_result: > > - msg = ('expected permit loss rate <{0}> ' > > - 'not between rate {1} and rate {2}').format( > > - permit_loss_rate, max_rate, min_rate) > > - self.logger.error(msg) > > - self.logger.info(pformat(loss_rate_table)) > > - ret_value = 0, result[0][1], result[0][2] > > + if throughput_stat_flag: > > + if not hit_result or not hit_result[0]: > > + msg = ('expected permit loss rate <{0}> ' > > + 'not between rate {1} and rate {2}').format( > > + permit_loss_rate, max_rate, min_rate) > > + self.logger.error(msg) > > + self.logger.info(pformat(loss_rate_table)) > > + ret_value = 0, result[0][0][1], result[0][0][2], 0 > > + else: > > + self.logger.debug(pformat(loss_rate_table)) > > + ret_value = rate, hit_result[0][0][1], > > + hit_result[0][0][2], hit_result[1][1] > > else: > > - self.logger.debug(pformat(loss_rate_table)) > > - ret_value = rate, hit_result[0][1], hit_result[0][2] > > + if not hit_result: > > + msg = ('expected permit loss rate <{0}> ' > > + 'not between rate {1} and rate {2}').format( > > + permit_loss_rate, max_rate, min_rate) > > + self.logger.error(msg) > > + self.logger.info(pformat(loss_rate_table)) > > + ret_value = 0, result[0][1], result[0][2] > > + else: > > + self.logger.debug(pformat(loss_rate_table)) > > + ret_value = rate, hit_result[0][1], hit_result[0][2] > > self.logger.info("zero loss rate is %f" % rate) > > > > return ret_value > > -- > > 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dts] [PATCH V1 1/1] framework/pktgen: add actual line rate return for loss. 2020-03-16 2:28 ` [dts] [PATCH V1 1/1] " yufengmx 2020-03-16 2:30 ` Tu, Lijuan @ 2020-03-20 8:04 ` Tu, Lijuan 1 sibling, 0 replies; 7+ messages in thread From: Tu, Lijuan @ 2020-03-20 8:04 UTC (permalink / raw) To: Mo, YufengX, dts, Han, YingyaX Applied, thanks > -----Original Message----- > From: Mo, YufengX > Sent: Monday, March 16, 2020 10:29 AM > To: dts@dpdk.org; Tu, Lijuan <lijuan.tu@intel.com>; Han, YingyaX > <yingyax.han@intel.com> > Cc: Mo, YufengX <yufengx.mo@intel.com> > Subject: [dts][PATCH V1 1/1] framework/pktgen: add actual line rate return > for loss. > > > measure_rfc2544_dichotomy/loss rate add actual line rate return value. > > Signed-off-by: yufengmx <yufengx.mo@intel.com> > --- > framework/pktgen_base.py | 47 ++++++++++++++++++++++++++++++--------- > - > 1 file changed, 35 insertions(+), 12 deletions(-) > > diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py index > 7e1ff48..049142f 100644 > --- a/framework/pktgen_base.py > +++ b/framework/pktgen_base.py > @@ -263,6 +263,7 @@ class PacketGenerator(object): > """ > delay = options.get('delay') > duration = options.get('duration') or 10 > + throughput_stat_flag = options.get('throughput_stat_flag') or > + False > self._prepare_transmission(stream_ids=stream_ids) > # start warm up traffic > self.__warm_up_pktgen(stream_ids, options, delay) @@ -270,6 +271,8 > @@ class PacketGenerator(object): > self._start_transmission(stream_ids, options) > # keep traffic within a duration time > time.sleep(duration) > + if throughput_stat_flag: > + _throughput_stats = > + self.__get_single_throughput_statistic(stream_ids) > self._stop_transmission(None) > result = {} > used_rx_port = [] > @@ -287,7 +290,10 @@ class PacketGenerator(object): > if loss_rate < 0: > loss_rate = 0 > result[port_id] = (loss_rate, tx_pkts, rx_pkts) > - return result > + if throughput_stat_flag: > + return result, _throughput_stats > + else: > + return result > > def measure_loss(self, stream_ids=[], options={}): > ''' > @@ -491,6 +497,7 @@ class PacketGenerator(object): > accuracy = options.get('accuracy') or 0.001 > permit_loss_rate = options.get('pdr') or 0.0 > duration = options.get('duration') or 10.0 > + throughput_stat_flag = options.get('throughput_stat_flag') or > + False > # start warm up traffic > delay = options.get('delay') > _options = {'duration': duration} @@ -505,10 +512,14 @@ class > PacketGenerator(object): > traffic_rate_min = min_rate > while True: > # run loss rate testing > - _options = {'duration': duration} > + _options = { > + 'throughput_stat_flag': throughput_stat_flag, > + 'duration': duration, } > result = self._measure_loss(stream_ids, _options) > loss_rate_table.append([rate, result]) > - status = self._check_loss_rate(result, permit_loss_rate) > + status = self._check_loss_rate( > + result[0] if throughput_stat_flag else result, > + permit_loss_rate) > # if upper bound rate percent hit, quit the left flow > if rate == max_rate and status: > hit_result = result > @@ -528,16 +539,28 @@ class PacketGenerator(object): > # set stream rate percent to custom value > self._set_stream_rate_percent(rate) > > - if not hit_result: > - msg = ('expected permit loss rate <{0}> ' > - 'not between rate {1} and rate {2}').format( > - permit_loss_rate, max_rate, min_rate) > - self.logger.error(msg) > - self.logger.info(pformat(loss_rate_table)) > - ret_value = 0, result[0][1], result[0][2] > + if throughput_stat_flag: > + if not hit_result or not hit_result[0]: > + msg = ('expected permit loss rate <{0}> ' > + 'not between rate {1} and rate {2}').format( > + permit_loss_rate, max_rate, min_rate) > + self.logger.error(msg) > + self.logger.info(pformat(loss_rate_table)) > + ret_value = 0, result[0][0][1], result[0][0][2], 0 > + else: > + self.logger.debug(pformat(loss_rate_table)) > + ret_value = rate, hit_result[0][0][1], > + hit_result[0][0][2], hit_result[1][1] > else: > - self.logger.debug(pformat(loss_rate_table)) > - ret_value = rate, hit_result[0][1], hit_result[0][2] > + if not hit_result: > + msg = ('expected permit loss rate <{0}> ' > + 'not between rate {1} and rate {2}').format( > + permit_loss_rate, max_rate, min_rate) > + self.logger.error(msg) > + self.logger.info(pformat(loss_rate_table)) > + ret_value = 0, result[0][1], result[0][2] > + else: > + self.logger.debug(pformat(loss_rate_table)) > + ret_value = rate, hit_result[0][1], hit_result[0][2] > self.logger.info("zero loss rate is %f" % rate) > > return ret_value > -- > 2.21.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-03-20 8:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-03-13 8:27 [dts] [PATCH V1 0/1] framework/pktgen: add actual line rate return for loss yufengmx 2020-03-13 8:27 ` [dts] [PATCH V1 1/1] " yufengmx 2020-03-16 2:25 ` [dts] [PATCH V1 0/1] " Mo, YufengX 2020-03-16 2:28 yufengmx 2020-03-16 2:28 ` [dts] [PATCH V1 1/1] " yufengmx 2020-03-16 2:30 ` Tu, Lijuan 2020-03-16 2:32 ` Mo, YufengX 2020-03-20 8:04 ` Tu, Lijuan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).