Alibaba Cloud Linux 2系统中TCP拥塞控制算法BBR对网络性能的影响
问题描述
符合下列条件的ECS实例中,内核TCP拥塞控制算法默认为BBR算法:
镜像:aliyun_2_1903_64_20G_alibase_20190619.vhd及之前所有的镜像版本。
内核:kernel-4.19.48-14.al7及之前所有的内核版本。
该算法会在CPU使用率高、网络数据包(PPS)高的情况下,对网络性能产生一定影响,例如,Redis数据库的性能降低。
问题原因
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低的情况下,影响不大。
解决方案
阿里云提醒您:
•如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
•如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
•如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
临时解决方案
请参考下列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或之后的版本。
更多信息
Alibaba Cloud Linux 2系统支持不同的连接使用不同的拥塞算法,可以通过网络命名空间(Net Namespace)进行控制。如果一台ECS实例中存在多个容器,且分属不同的网络命名空间,有些容器只对外提供服务,另一些容器只对内提供服务,则可以对这些容器分别设置不同的拥塞控制算法。
相关文档
适用于
•云服务器ECS
如果您有其他问题,可以联系北京优胜智连阿里云代理商,为您提供一对一专业全面的技术服务,同时新/老阿里云会员,均可享受我公司代理商价格,欢迎咨询!