Analyzing ab_estimations for the experiment with 300Mbps CBR cross traffic(LINK), we found that AB estimations are consistently higher than actual ab when sending rate exceeds actual ab, which cause packet loss immediately.
Sample pstreams when (1) send rate < ab; and (2) send rate > ab
Proposal: After smoothing, if the excursion lasts to the end of the pstream, then use the sending rate ahead of the excursion as abest; otherwise abest is the highest probing rate. Use "gap_ns_epsilon= 1us" in this algorithm.
Proposal: When average sending rate is high, the buffer fails to drain quickly in the beginning of the next pstream, which makes the first few recvgaps extremely smaller than sendgaps after smoothing. The first few small values affect the result of exponential smoothing. So before exponential smoothing is applied, spike_removal_recv_gap=max(spike_removal_recv_gap,spike_removal_sendgap*0.875
(1) arithmatic smoothing is so variant, which should be taken out of consideration. (2) The new abest algorithm lowers abests when average sending rate is high. But it brings out some low values when sending rate is smaller than ab. Fortunately that's rare events which can be smoothed away by TAO and ETA filters. (3) new pruning heuristics brings a little lower abests when avg send rate is high.
(1) exponential smoothing, gap_ns_epsilon=1us, old abest algorithm. 24 packet losses (2) exponential smoothing, gap_ns_epsilon=1us, new abest algorithm. 24 packet losses (3) exponential smoothing, gap_ns_epsilon=1.5us, new abest algorithm. 80 packet losses (4) exponential smoothing, gap_ns_epsilon=1us, old abest algorithm. 298 packet losses
The new abest algorithm fails to improve the performance without cross traffic because there are only a little portion of pstreams which have excursions terminating before the last index:
#pstreams with one excursion lasts to the end: otherwise 7678:208 (gap=1.5us, exp) in a 10s run 7867:231 (gap=1us, exp) in a 10s run