首先感谢Netflix的工程师,是他们的工作使得FreeBSD上使用BBR成为可能。
这是Netflix相关项目的GitHub: tcplog_dumper
修改内核配置
# cd /usr/src/sys/amd64/conf
如果安装FreeBSD时没有选择安装内核源码,你可以直接解压FreeBSD发行镜像中的/usr/freebsd-dist/src.txz到/usr/src/.
# cp GENERIC GENERIC-BBR
# ee GENERIC-BBR
调整配置,可以去掉许多不用的模块以提升性能和节省编译时间,修改ident的值为GENERIC-BBR,在ident这一项下面加入以下项目:
options TCPHPTS
options RATELIMIT
makeoptions WITH_EXTRA_TCP_STACKS=1
新建/etc/src.conf,内容为:
KERNCONF=GENERIC-BBR
MALLOC_PRODUCTION=yes
编译并安装内核
如果vps网络不好,中途可能断开。这时可以使用screen来开虚拟终端帮助解决问题,使用请自行搜索。
# /usr/sbin/config GENERIC-BBR
# cd ../compile/GENERIC-BBR
# make cleandepend && make depend
# make -jN
其中N建议为CPU核心数+1. 如果编译出错,通常原因是配置时模块缺失。实在不能确定是否需要的模块请不要禁用。
# make install
安装内核,完成后重启使用新内核。
# uname -a
如果显示出GENERIC-BBR,恭喜你,BBR内核编译并安装成功。
配置和加载BBR模块
# sysrc kld_list+="tcp_rack tcp_bbr"
启动时加载BBR模块。
# echo 'net.inet.tcp.functions_default=bbr' >> /etc/sysctl.conf
设置默认使用BBR,重启。
# sysctl net.inet.tcp.functions_default
如果结果是net.inet.tcp.functions_default: bbr,则启用BBR成功。