Hello,
The following (copied from tcp_bbr.c in Linux kernel) describes when BBR quits STARTUP. "BBR estimates that STARTUP filled the pipe if the estimated bw hasn't changed by at least bbr_full_bw_thresh (25%) after bbr_full_bw_cnt (3) non-app-limited rounds".
However, BBR has neglected rwnd-limited cases. A receiver may employ receive window
tuning algorithms [1] or receiver side congestion control algorithms [2]. I am also working on a receiver side CCA – X.
I discovered that when X increases rate by less than 25% per RTT for 3 consecutive RTTS,
BBR quits STARTUP even when cwnd is still well below BDP (only one BBR flow in the emulated network). This hurts performance seriously.
I have noticed that
bbr_check_full_bw_reached() does
not update full_bw_reached if rate is limited by application. It is preferrable that BBR also checks rwnd_limited cases by e.g. changing
from if (bbr_full_bw_reached(sk) || !bbr->round_start || rs->is_app_limited) return;
to if (bbr_full_bw_reached(sk) || !bbr->round_start || rs->is_app_limited || is_rwnd_limited)
return;
Further, the Linux kernel's pacing algorithm sends out well spaced single packets when
pacing rate is very low. This may help when bottleneck capacity is very small, but not when bottleneck capacity is sufficient but only rwnd/cwnd is small .
In the case of X, it starts from 2 segments per RTT and gradually increases rwnd to
BDP. In a setup with 100 Mbps bottleneck and 200 ms rtt, when rwnd is 2 MSS, BBR sends singles packets with roughly 100 ms inter-packet spacing. Sometimes, a packet is sent nearly 100 ms after an ack is received. This breaks receiver side RTT estimation (used
by dynamic right sizing and some delay based receiver side algorithms).
Because the unit of pacing is an SKB, we may probably need to ensure that there are
at least two segments in an SKB when bottleneck capacity is sufficient even though pacing rate (determined by min(cwnd, rwnd)) is very low.
Please let me know if you would like to do any adaptations to BBR to support receiver
side window tuning algorithms?
[1]
Heesu Im et al.
Receiver-Side TCP Countermeasure to Bufferbloat in Wireless Access Networks. In IEEE TRANSACTIONS ON MOBILE
COMPUTING.
|
This document specifies the rLEDBAT, a set of mechanisms that enable the execution of a less-than-best-effort congestion control algorithm for TCP at the receiver end.
|
Best regards,
Qian