用户工具

站点工具


freebsd:freebsd_bbr

轻松在现代 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, 测试出来有些争议, 移除了.

freebsd/freebsd_bbr.txt · 最后更改: Hshh