在Ubuntu 14.04 和 Debain 7 老系统上安装BBR魔改版

一、先提供原版bbr代码和魔改版bbr代码参考,有兴趣的可以自己对比区别,反正我是看不懂了:

原版BBR(仅供参考,此例不会用到):
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/plain/net/ipv4/tcp_bbr.c

魔改版BBR(下面的步骤会下载该文件):
https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c

注意事项:安装原版BBR只需要安装内核的image即可,对header没有要求,而安装魔改版BBR,编译时系统必须安装4.10以上版本的kernel及对应的linux-header,gcc版本应在4.9以上,以下步骤在ubuntu 14.04及debian 7上测试通过:

二、下载和安装kernel及对应的linux-header

1
2
3
4
5
6
7
8
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.9/linux-headers-4.10.9-041009_4.10.9-041009.201704080516_all.deb
dpkg -i linux-headers-4.10.9*.deb
 
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.9/linux-headers-4.10.9-041009-generic_4.10.9-041009.201704080516_amd64.deb
dpkg -i linux-headers-4.10.9-041009-generic_4.10.9-041009.201704080516_amd64.deb
 
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.9/linux-image-4.10.9-041009-generic_4.10.9-041009.201704080516_amd64.deb
dpkg -i linux-image-4.10.9*.deb

三、通过以下循环命令删除老的kernel,期间会用到apt-get autoremove等命令,自行按提示操作。

1
2
dpkg -l|grep linux-image
apt-get purge linux-image-3.13.0-83-generic #旧内核linux-image-3.13.0-83-generic

四、更新grub
update-grub

五、重启系统
reboot

六、检查当前gcc版本,若不是9.4以上则按以下步骤操作:

1
2
3
4
5
6
7
8
9
10
gcc -v
apt-get update
apt-get install build-essential
apt-get install software-properties-common
add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install gcc-4.9 g++-4.9 make
updatedb
ldconfig
locate gcc

这些步骤好了之后gcc -v ,如果你发觉他显示的 gcc版本还是4.8x的话,继续如下步骤,注意一行一行的复制,回车进行下一行,当最后一行输入完毕之后会提示你 gcc安装位置更新成功。

1
2
3
4
5
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 49 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.9 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.9 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.9 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.9

以上命令执行完之后再运行一次gcc -v命令,显示是4.9x之后你就可以继续进行下面的安装步骤了。

七、下载魔改版BBR源文件编译安装

1
2
3
4
5
6
7
wget -O ./tcp_tsunami.c https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" > Makefile
make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc-4.9
install tcp_tsunami.ko /lib/modules/$(uname -r)/kernel
cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
depmod -a
insmod tcp_tsunami.ko

八、 执行以下两条命令添加相关参数到sysctl.conf文件:

1
2
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=tsunami" >> /etc/sysctl.conf

九、让sysctl.conf文件的修改生效:
sysctl -p

十、恭喜你完工了!