Alibaba Cloud Linux 2系统中TCP拥塞控制算法BBR对网络性能有影响,如何处理?

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

Alibaba Cloud Linux 2系统的内核TCP拥塞控制目前支持Reno、BBRCubic三种算法,在不同的网络场景下,这些算法的控制性能将会有所差异。本文将介绍Alibaba Cloud Linux 2系统中TCP拥塞控制算法BBR(Bottleneck Bandwidth and RTT)对网络性能的影响原因及相应的解决方案。

问题描述

符合下列条件的ECS实例中,默认的TCP拥塞控制算法BBRCPU使用率高和网络数据包(PPS)较高的情况下,对网络性能产生影响。例如,Redis数据库的性能降低。

  • 镜像:aliyun_2_1903_64_20G_alibase_20190619.vhd及之前版本的镜像。

  • 内核:kernel-4.19.48-14.al7及之前版本的内核。

问题原因

使用内核TCP拥塞控制默认BBR算法时网卡qdisc没有使用fq调度器,TCP协议栈将采用其内部实现的高精度的计时器(hrtimer),每个连接的高精度计时器将额外增加CPU的消耗。

解决方案

您可以根据业务的实际情况选择以下方案解决问题。

  • 修改TCP拥塞控制算法。

    如果ECS实例中的应用仅对内网提供服务,建议参考下列命令,修改TCP拥塞控制算法为cubic。因为内网环境带宽高、时延低。

    sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
    echo "net.ipv4.tcp_congestion_control=cubic" | sudo tee -a /etc/sysctl.d/50-aliyun.conf
  • 修改相应网卡的调度策略。

    如果ECS实例中的应用对外提供服务,建议继续使用BBR算法,但需执行以下命令,将相应网卡的调度策略修改为tc-fq

    <$DEV>需替换为要调整的网卡名称。

    sudo tc qdisc add dev <$DEV> root fq
  • 在使用BBR算法时,不建议使用其他非tc-fq的调度策略,因其会占用额外的CPU资源。

  • 升级ECS实例的内核至最新的版本,彻底解决该问题。

    警告
    • 升级内核可能会出现兼容性和稳定性问题,建议您查看Alibaba Cloud Linux 2镜像发布记录了解具体内核功能后谨慎进行操作。

    • 重启实例将导致您的实例暂停运行,这可能引发业务中断和数据丢失。因此,建议您在执行此操作之前备份关键数据,并选择在非业务高峰期进行。

    1. 执行以下命令,升级内核到最新版本。

      sudo yum update kernel
    2. 执行以下命令,重启实例使配置生效。

      sudo reboot