一、 BBR简介
bbr算法作为google出品的一套拥塞控制算法,致力于解决两个问题:
1. 在一定丢包率的网络上充分利用带宽
2. 降低网络链路buffer占用率,降低延迟
bbr是非常适合于高延迟、高带宽的网络,在一定丢包率网络环境,使用bbr可以大幅提高传输质量。linux-4.9或以上内核开始支持bbr,对于网络加速来讲,这是一件极大的好事。下面来介绍如何编译linux-4.9内核开启bbr,之前写过一篇编译内核开启bbr的文章,中间忽略好多细节,下面详细描述编译linux-4.9内核过程。
二、 编译内核
从官网(kernel)上下载linux-4.9.79版本(linux-4.9目前最新版本)内核,编译工具gcc、rpmbuild等请自行安装。
解压进入linux-4.9.79,编译内核的时候是根据该目录下的.config配置文件进行编译,该文件第一次是不存在的,我们需要自己配置。通常有几种方法:
1. 拷贝本地配置文件,”cp /boot/config-`uname -r`* .config”或”make localmodconfig”。
2. make defconfig,使用默认的config。
3. make menuconfig.
这里使用make menuconfig来进行配置内核。
在进行配置的时候,有些点需要注意,尤其是关于bbr的配置,因为内核默认并不将bbr选项选上,所以导致编译出来的内核不支持bbr。
下面是编译选项:
1. 去掉debug
进入”Kernel hacking > Compile-time checks and compiler options”,将”Compile the kernel with debug info”选项去掉,此选项会导致编译的内核很大。
2. fq
sched fq,基于tcp连接发现pacing rate来发送数据。Linux-3.9后内核出现tcp pacing rate概念,可以将窗口数据按照一定速率平滑发送出去,tcp依靠schedule来实现pacing。bbr的pacing也是依靠fq,所以这个选项一定确认是被选上的。
执行命令”make menuconfig”,进入配置界面,然后进入”Networking support > Networking options > Qos and/or fair queueing”,这个界面有目前支持的队列算法,如”CBQ,ATM,PRIO,SFQ”等,确认”Fair Queue Controlled Delay AQM”、”Fair Queue”这两个选项是选上的。这里选着M。
3. bbr
进入”Networking support > Networking options > TCP: advanced congestion control”界面,可以看到有”BBR TCP”一栏选项,确认”BBR TCP”是被选上的,这里选M。
其它需要的配置项可以自行配置,至此,内核配置完成,执行”make rpm”编译内核rpm包,过程大概40M-1H左右,具体视机器配置而定。
三、 开启BBR
安装好linux-4.9内核后,修改”/etc/grub.conf”里的”default=1”改为”default=0”,然后重启。重启后,在”ect/sysctl.conf”添加”net.core.default_qdisc=fq”,”net.ipv4.tcp_congestion_control=bbr”。执行”sysctl -p”使生效。
执行命令”lsmod | grep bbr”,查看BBR是否正确启动。
如果返回字符串包含bbr,BBR已经正确启动。