X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_bitratestats%2Frte_bitrate.c;h=3ceb3516685b74aecb265b152e1dbd7513ae42e6;hb=98a7ea332ba3da0f74ec951595d36a616165b255;hp=260750fe8433dacf829afd5a2b37d108a42a74d2;hpb=2ad7ba9a6567029c2e497e8b61df96d7b911c70f;p=dpdk.git diff --git a/lib/librte_bitratestats/rte_bitrate.c b/lib/librte_bitratestats/rte_bitrate.c index 260750fe84..3ceb351668 100644 --- a/lib/librte_bitratestats/rte_bitrate.c +++ b/lib/librte_bitratestats/rte_bitrate.c @@ -112,12 +112,17 @@ rte_stats_bitrate_calc(struct rte_stats_bitrates *bitrate_data, port_data->peak_ibits = cnt_bits; delta = cnt_bits; delta -= port_data->ewma_ibits; - /* The +-50 fixes integer rounding during divison */ + /* The +-50 fixes integer rounding during division */ if (delta > 0) delta = (delta * alpha_percent + 50) / 100; else delta = (delta * alpha_percent - 50) / 100; port_data->ewma_ibits += delta; + /* Integer roundoff prevents EWMA between 0 and (100/alpha_percent) + * ever reaching zero in no-traffic conditions + */ + if (cnt_bits == 0 && delta == 0) + port_data->ewma_ibits = 0; port_data->mean_ibits = cnt_bits; /* Outgoing bitrate (also EWMA) */ @@ -132,6 +137,8 @@ rte_stats_bitrate_calc(struct rte_stats_bitrates *bitrate_data, else delta = (delta * alpha_percent - 50) / 100; port_data->ewma_obits += delta; + if (cnt_bits == 0 && delta == 0) + port_data->ewma_obits = 0; port_data->mean_obits = cnt_bits; values[0] = port_data->ewma_ibits;