TCP_BBR(4)
π TCP_BBR(4) β like, the whole manual, but make it make sense
okay bestie, so this is a Kernel Interfaces Manual page and it's about tcp_bbr, which literally stands for TCP Bottleneck Bandwidth and Round-Trip Time Algorithm. yes that's a mouthful, no we're not abbreviating it, it's iconic β¨
πΈ NAME πΈ
tcp_bbr β the TCP Bottleneck Bandwidth and Round-Trip Time Algorithm. that's the whole name, she's long, she's worth it π
π SYNOPSIS π
so there's two steps and you gotta do both, no skipping π«Ά
Step one β load the driver as a module at boot time by putting this line in loader.conf(5):
tcp_bbr_load="YES"
Step two β to enable the TCP stack you must put this line in sysctl.conf(5):
net.inet.tcp.functions_default=bbr
like, "must" must. not optional. don't come back to me saying it doesn't work if you skipped one π
π¦ DESCRIPTION π¦
so Bottleneck bandwidth and round-trip time (BBR) is a congestion control algorithm, and her whole thing is that she seeks high throughput with a small queue by probing BW and RTT. that's the vibe check she's passing π
she's a round-up redesign of congestion control β meaning she is not loss-based, not delay-based, not ECN-based, and not AIMD-based. not any of those. we're doing something new here, periodt.
the core design of BBR? it's all about creating a model graph of the network path by estimating the maximum BW and minimum RTT on each ACK. every single ACK, bestie. it's giving main character energy π₯
π MIB Variables π
the algorithm exposes these scopes in the net.inet.tcp.bbr branch of the sysctl(3) MIB:
cwndβ Cwnd controls, for example "target cwnd rtt measurement" and "BBR initial window".measureβ Measurement controls.pacingβ Connection pacing controls.policerβ Policer controls, for example "false detection threshold" and "loss threshold".proberttβ Probe RTT controls.startupβ Startup controls.statesβ State controls.timeoutβ Time out controls.
and besides all the lil variables inside those scopes, these are also exposed in the net.inet.tcp.bbr branch π
clrlostβ Clear lost counters.software_pacingβ Total number of software paced flows.hdwr_pacingβ Total number of hardware paced flows.enob_no_hdwr_pacingβ Total number of enobufs for non-hardware paced flows.enob_hdwr_pacingβ Total number of enobufs for hardware paced flows.rtt_tlp_threshβ What divisor for TLP rtt/retran will be added (1=rtt,2=1/2 rttetc).reorder_fadeβ Does reorder detection fade, if so how many ms (0means never).reorder_threshβ What factor for rack will be added when seeing reordering (shift right).bb_verboseβ Should BBR black box logging be verbose.sblklimitβ When do we start ignoring small sack blocks.resend_use_tsoβ Can resends use TSO?data_after_closeβ Do we hold off sending a RST until all pending data is ack'd.kill_paceoutβ When we hit this many errors in a row, kill the session?error_paceoutβ When we hit an error what is the min to pace out in usec's?cheat_rxtβ Do we burst1msbetween sends on retransmissions (like rack)?minrtoβ Minimum RTO in ms.
π SEE ALSO π
go read these too, they're the friend group π«Ά
cc_chd(4),cc_cubic(4),cc_hd(4),cc_htcp(4),cc_newreno(4),cc_vegas(4),h_ertt(4),mod_cc(4),tcp(4),tcp_rack(4),mod_cc(9)
and the reading list, because she's academic AND pretty π
- Neal Cardwell, Yuchung Cheng, Stephen Gunn, Soheil Hassas Yeganeh, and Van Jacobson, βBBR: Congestion-Based Congestion Controlβ, ACM Queue, Vol. 14, September / October 2016.
- Dominik Scholz, Benedikt Jaeger, Lukas Schwaighofer, Daniel Raumer, Fabien Geyer, and Georg Carle, βTowards a Deeper Understanding of TCP BBR Congestion Controlβ, IFIP Networking 2018, http://www.net.in.tum.de/fileadmin/bibtex/publications/papers/IFIP-Networking-2018-TCP-BBR.pdf, May 2018.
β HISTORY β
the tcp_bbr congestion control module first appeared in FreeBSD 13.0. slay, she's a 13.0 girlie π
π AUTHORS π
the tcp_bbr congestion control module was written by Randall Stewart <rrs@FreeBSD.org> and sponsored by Netflix, Inc. β yes that Netflix, no cap π₯
this manual page was written by Gordon Bergling <gbe@FreeBSD.org>. thank you Gordon, we love a documenter π
ngl bestie, if you're gonna mess with these sysctls on a live system, know what you're doing first β the page tells you what everything is, not what happens if you get it wrong π
okay that's the whole page!! π¦ she's from Debian, dated December 17, 2023, and she ate fr fr π β¨
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- nixpkgs unstable: source
- Copyright (c) 2020, Gordon Bergling <gbe@FreeBSD.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms