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

本文为您介绍Alibaba Cloud Linux 2系统中TCP拥塞控制算法BBR(Bottleneck Bandwidth and RTT)对网络性能有影响的原因及解决方案。

问题描述

符合下列条件的ECS实例中,内核TCP拥塞控制算法默认为BBR算法。该算法会在CPU使用率高、网络数据包(PPS)高的情况下,对网络性能产生一定影响。例如,Redis数据库的性能降低。

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

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

问题原因

Alibaba Cloud Linux 2系统的内核TCP拥塞控制目前支持Reno 、BBR、cubic三种算法,在不同网络场景下,控制性能会有差异。BBR算法估算当前连接的BW(吞吐)和RTT(时延)以调整拥塞窗口。BBR算法依赖于TCP连接的封装(pacing)功能,而TCP的封装实现有下列两种方式:

  • 若网卡设备使用qdisc的tc-fq(Fair Queue Traffic Policing)调度,则直接复用tc-fq调度中基于流的封装。

  • 若网卡设备没有使用qdisc的tc-fq调度,则TCP改用其内部的封装方式。

TCP协议内部的封装方式依赖于Linux系统的高精度计时器(hrtimer),每个连接的高精度计时器会额外增加CPU消耗。在CPU使用率和网络PPS均高的情况下,BBR算法对网络性能的影响更加明显。在CPU空闲并且网络PPS低的情况下,影响不大。

解决方案

请参考下列TCP拥塞控制算法的建议,选择符合您业务实际情况的解决方式。

  • 修改TCP拥塞控制算法。

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

    sysctl -w net.ipv4.tcp_congestion_control=cubic
    sh -c "echo 'net.ipv4.tcp_congestion_control=cubic'" >> /etc/sysctl.d/50-aliyun.conf
  • 修改相应网卡的调度策略。

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

    tc qdisc add dev <$Dev> root fq
    说明

    <$Dev>指需要调整的网卡名称。

  • 使用BBR算法时,不建议使用其他非tc-fq的调度策略。因为这样会占用更多额外的CPU资源。

  • 建议您升级ECS实例的内核至kernel-4.19.57-15.al7及之后的版本,彻底解决该问题。