I am of two minds about BBR. I have been mostly waiting for BBRv2 to come out before recommending it for anything other than its original purpose: being better than DASH (netflix) style traffic for youtube. It is presently ill-suited for sharded web sites in particular (does not compete with itself very well). As for speedtest-like benchmarks to the router, it is good at finding the actual capacity of the link and staying there.
With the “FQ” portion fq_codel/cake/fq_pie in the loop, it does very little harm, and for longer than 10s transfers tends to stay in its delay based regime. The first 10s, though… and against policers, however, it shreds all other traffic that someone might be trying to control via their policer so they have a good experience with voip or video. BBR does not have RFC3168 ecn support at all, nor does it respond quickly to drops from the “codel” portion of the algorithm. Because of its non tcp-friendly behavior, it outcompetes cubic in many cases which you could (as BBR-user) celebrate, or as a cubic user, be unhappy about. BBR is helpful against genuinely lossy links where cubic would struggle.
It requires slightly more cpu resources than cubic, also. It is a mixed bag. On even a fq_codel enabled router it will mask other bufferbloat problems elsewhere on your network.
Secondly I am quite mortally opposed to tcp proxies, because in general breaking the tcp control loop in two, like that, negatively impacts the tcp control loop. A good example of where tcp proxies can break things, is in an otherwise responsive screen sharing application can no longer get enough feedback to drop a frame rather than keep spitting packets.
We see this all the time nowadays also in container systems, where not using TCP_NOTSENT_NOWAT in particular can lead to 99% of the data being transferred between web proxy (nginx) and the container, but to the user, never getting sent, causing problems with actual interactivity of other flows. A hilarious real world example of this happened last year, where correctly enabling that option between container and nginx resulted in that reduction of traffic, with the observable benefit was a certain large maps provider suddenly started getting individual components of the maps and other data downloaded much faster.
The BBR implementation now in cilium relies on host not network backpressure as of linux 6.0, and works pretty well, except when talking directly to the net, or udp within the container.
I am very very not happy about the explosion of the tcp proxy concept in the past 2 years. People using it aren’t measuring the right things in the right places.
I can give cites for BBRs problems if you like. But yes - tcp speed tests will look better except not reflect customer reality, proxying will look better for 1/2 of the connection with rather undefined results on the other half, containers as I already said… and for file servers… depends on the workload.
See also:
https://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf