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) */
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;