Linux开启bbr加速
本文参考BBR拥塞控制算法、理解 BBR 拥塞控制算法--理论篇、开启CentOS/Debian自带的TCP BBR加速
介绍
互联网曾广泛使用基于丢包的拥塞控制算法,例如Reno([Jac88], [Jac90], [WS95] [RFC5681])和 CUBIC(HRX08, draft-ietf-tcpm-cubic),这类算法认为丢包和拥塞是等效的。长久以来这类算法都运作的很好,但这并不能说明他们是绝对正确的。这种良好的表现是由于网络交换机和路由器的缓冲区都十分适配当时的网络带宽。而一旦发送者的发送速率足够快,缓冲区便会被快速填满,进而引发丢包。
实际上丢包并不等效于拥塞。拥塞可以被看作是一种在网络路径中,传输中的数据量始终大于带宽-时延积的场景。随着互联网的不断发展,丢包现象在非拥塞场景下也频繁发生。而基于丢包的拥塞控制策略给网络带来了源源不断的问题:
- 浅缓存:在浅缓存场景下,丢包往往发生在拥塞之前。高速、长距离的现代网络,搭配上消费级的浅缓存交换机,基于丢包的拥塞控制算法可能会导致极其糟糕的吞吐量,而这种现象则归咎于这类算法对于丢包的过激反应。流量突发引起的丢包会使发送速率乘性递减(这种丢包现象在空闲网络中也会频繁发生)。这种动态特性,使得基于丢包的拥塞控制算法在实际应用中很难对网络带宽进行充分利用:维持10Gbps/100ms RTT的网络,必须要求其丢包率在0.000003%以下。而更为实际的1%的丢包率,则会导致其只能维持在3Mbps/100ms(无论是瓶颈带宽的性能如何)。
- 深缓存:在有着深缓存的瓶颈链路中,拥塞往往发送在丢包之前。在现今的的边缘网络中,基于丢包的拥塞控制算法对众多最后几英里的设备,进行了深缓存的反复填充,引发了不必要的数秒级的排队延时,也就是“缓冲膨胀”的问题。
BBR拥塞控制算法使用了另类的方式:不用丢包去衡量拥塞是否发生,而是直接对网络建模来避免以及应对真实的拥塞。
BBR算法已经在之前的论文中大致描述过 [CCGHJ16] [CCGHJ17],活跃性的社区工作也在持续进行中。该文档将对现有的BBR算法进行详细解释。
该文档将以下列形式进行组织:第二节将会给出多种术语定义。第三节是对BBR算法的设计概述。第四节将对BBR算法进行细节分析,包括BBR的网络路径模型,控制参数以及状态机。
以上来自BBR拥塞控制算法,更多详细细节可以参考理解 BBR 拥塞控制算法--理论篇。
安装
是用命令查看内核版本
uname -r
Linux 内核大于4.9
开启 BBR
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
# 生效
sysctl -p
查看是否生效
sysctl net.ipv4.tcp_available_congestion_control # 结果有bbr则成功
sysctl -n net.ipv4.tcp_congestion_control # 结果有bbr则成功
lsmod | grep bbr # 结果有bbr则成功
Linux 内核小于4.9
可以使用 爱生活 脚本
wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
注意!:内核版本5.15以上的不推荐使用魔改脚本,可能效果不如原版bbr
© 版权声明
文章版权归作者所有,未经允许请勿转载。
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!