生命不息
折腾不止

Ubuntu开启PPC拥塞控制算法–看起来不比BBR差,还支持IPv6哦!

本文由 91yunbbs 用户 locknlock 投稿。讨论、提问建议前往论坛:【 论坛原文链接

前方深坑预警

本文仅做抛砖引玉,供读者举一反三。

提前说一下编译安装 PCC 可能有的坑:

  • 当前内核版本的 header 没装。
  • gcc 版本过低。
  • gcc 强行把 warn 当 error 来处理,即 werror 。
  • PCC 代码年久失修, Linux 内核升级后改了部分代码导致 tcp_TA.c 内某些引用出错。
  • 直接使用 insmod 动态加载的模块在重启后不会自动加载,需要再次 insmod 一次,可以百度找解决方法。
  • 可能还有更多编译坑。
  • 没事还是用 bbr ,毕竟有一键安装脚本。

编译安装 PCC

PCC is a new approach for TCP congestion control base on real-time performance analysis. This is a kernel implementation of it.

PCC 和 BBR 一样都是一直 TCP 拥塞控制算法,就目前我自己做的测试( ipv6 环境)来看,效果不差。下面介绍如何在 Linux 下开启 PPC 。

安装环境:

  • Ubuntu 14.04.5 LTS x86_64
  • kernel version 4.9.0-040900-generic
  • gcc version 4.9.4

升级 kernel 为 4.9 ,需要同时安装 image 和 header ,其他版本 kernel 一样,必须安装 header 。

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

dpkg -i linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

dpkg -i linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

reboot

安装编译工具

apt-get install build-essential -y

gcc -v

如果默认安装的 gcc 版本低于 4.9 ,按照下面操作升级。

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

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
git clone https://github.com/giltu/KernelPCC.git

cd KernelPCC

编辑 tcp_TA.c, 替换 NET_INC_STATS_BHNET_INC_STATS,
替换 NET_ADD_STATS_BHNET_ADD_STATS ,保存。
== 此处替换操作仅针对 4.9 及更新版本的内核。 ==

然后开始编译:

make

编译过程中 warn 不用管,但是出现 error 就会失败, == 这一步各种坑 == 。编译成功会在目录下生成一个 tcp_TA.ko 文件。

加载内核模块:

insmod tcp_TA.ko

lsmod | grep TA

返回 tcp_TA 16384 32 类似这样的结果即加载成功。

sysctl net.ipv4.tcp_available_congestion_control

返回一般为 net.ipv4.tcp_available_congestion_control = bbr cubic reno TA

切换 tcp 拥塞控制算法为 TA :

sysctl -w net.ipv4.tcp_congestion_control=TA

最后检查一下:

sysctl net.ipv4.tcp_congestion_control

返回 net.ipv4.tcp_congestion_control=TA 即可。

补充

  • 不一定需要 4.9 版本的 kernel ,其他版本的 kernel 安装好相应的 header 和稍微改一下由于内核代码更新换代导致的小错误即可。
  • Ubuntu/Debian kernel 及 header 列表 http://kernel.ubuntu.com/~kernel-ppa/mainline/
赞(0)
未经允许不得转载:91云(91yun.co) » Ubuntu开启PPC拥塞控制算法–看起来不比BBR差,还支持IPv6哦!

留言 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #0

    人家叫PCC。。标题一直是个错的

    玉狐7年前 (2017-06-19)回复
  2. #0

    在阿里云上试了一下,速度直接掉到0

    hehe7年前 (2017-06-07)回复
  3. #0

    没事用tcpchina算了……

    kurokitomoko7年前 (2017-06-06)回复
  4. #0

    不要求4.9是不是意味着可以和锐速一起开?

    mk477年前 (2017-06-06)回复