====== 轻松在现代 FreeBSD 中启用 BBR 功能 ======
从 14.1 开始 tcphpts, tcp_rack, tcp_bbr 都已经默认编译为模块, 需要用直接加载就可以了, 不需要重新编译内核.
==== 加载模块 ====
kldload tcphpts
kldload tcp_bbr
==== 系统启动自动加载模块 ====
可以在 /etc/rc.conf 加入以下内容
kld_list="tcphpts tcp_bbr"
==== 检查模块加载成功 ====
运行以下命令, 看到有 BBR 一行, 并且有使用情况
sysctl net.inet.tcp.functions_available
==== 切换 TCP 默认实现方式为 BBR ====
运行以下命令
sysctl net.inet.tcp.functions_default=bbr
==== 过早启动的程序使用 BBR ====
默认在切换前启动的程序并不会使用到切换后的 bbr, 一种方法是重启程序
另一种是使用特定设置, 15.1 以前使用 sysctl
sysctl net.inet.tcp.functions_inherit_listen_socket_stack=0
15.1 及以后运行以下命令
tcpsso -S freebsd TCP_FUNCTION_BLK bbr
==== 一些优化参数 ====
== 20241205 ==
关闭 net.inet.tcp.bbr.measure.use_google 后, 大多数情况不会出现断流, 极小概率在某个系统出现极低速(该问题是接收端其他bug导致)
net.inet.tcp.bbr.measure.use_google=0
== 20260719 ==
可以通过优化 net.inet.tcp.bbr.cwnd.highspeed_min net.inet.tcp.bbr.cwnd.max_target_limit net.inet.tcp.bbr.probertt.cwnd, 使其在快速网络中接近 linux 的水平, 但是还是没 linux 能打
* 1Gbps
# 1Gbps
net.inet.tcp.bbr.cwnd.highspeed_min=128
net.inet.tcp.bbr.cwnd.max_target_limit=16
net.inet.tcp.bbr.probertt.cwnd=16
net.inet.tcp.sendbuf_inc=262144
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.sendspace=4194304
* 2.5Gbps
# 1Gbps
kern.ipc.maxsockbuf=33554432
net.inet.tcp.bbr.cwnd.highspeed_min=256
net.inet.tcp.bbr.cwnd.max_target_limit=16
net.inet.tcp.bbr.probertt.cwnd=32
net.inet.tcp.sendbuf_inc=524288
net.inet.tcp.sendbuf_max=33554432
net.inet.tcp.sendspace=2097152
* 10Gbps
# 10Gbps
kern.ipc.maxsockbuf=67108864
net.inet.tcp.bbr.cwnd.highspeed_min=512
net.inet.tcp.bbr.cwnd.max_target_limit=32
net.inet.tcp.bbr.probertt.cwnd=128
net.inet.tcp.sendbuf_inc=1048576
net.inet.tcp.sendbuf_max=67108864
net.inet.tcp.sendspace=4194304
== 20260807 ==
关于这个参数 net.inet.tcp.bbr.cwnd.tar_rtt, 测试出来有些争议, 移除了.
{{tag>freebsd bbr rack}}