Alibaba Cloud Linux 2系統(tǒng)中TCP擁塞控制算法BBR對網(wǎng)絡性能有影響,如何處理?
本文為您介紹Alibaba Cloud Linux 2系統(tǒng)中TCP擁塞控制算法BBR(Bottleneck Bandwidth and RTT)對網(wǎng)絡性能有影響的原因及解決方案。
問題描述
符合下列條件的ECS實例中,內(nèi)核TCP擁塞控制算法默認為BBR算法。該算法會在CPU使用率高、網(wǎng)絡數(shù)據(jù)包(PPS)高的情況下,對網(wǎng)絡性能產(chǎn)生一定影響。例如,Redis數(shù)據(jù)庫的性能降低。
鏡像:
aliyun_2_1903_64_20G_alibase_20190619.vhd
及之前所有的鏡像版本。內(nèi)核:
kernel-4.19.48-14.al7
及之前所有的內(nèi)核版本。
問題原因
Alibaba Cloud Linux 2系統(tǒng)的內(nèi)核TCP擁塞控制目前支持Reno 、BBR、cubic三種算法,在不同網(wǎng)絡場景下,控制性能會有差異。BBR算法估算當前連接的BW(吞吐)和RTT(時延)以調(diào)整擁塞窗口。BBR算法依賴于TCP連接的封裝(pacing)功能,而TCP的封裝實現(xiàn)有下列兩種方式:
若網(wǎng)卡設(shè)備使用qdisc的tc-fq(Fair Queue Traffic Policing)調(diào)度,則直接復用tc-fq調(diào)度中基于流的封裝。
若網(wǎng)卡設(shè)備沒有使用qdisc的tc-fq調(diào)度,則TCP改用其內(nèi)部的封裝方式。
TCP協(xié)議內(nèi)部的封裝方式依賴于Linux系統(tǒng)的高精度計時器(hrtimer),每個連接的高精度計時器會額外增加CPU消耗。在CPU使用率和網(wǎng)絡PPS均高的情況下,BBR算法對網(wǎng)絡性能的影響更加明顯。在CPU空閑并且網(wǎng)絡PPS低的情況下,影響不大。
解決方案
請參考下列TCP擁塞控制算法的建議,選擇符合您業(yè)務實際情況的解決方式。
修改TCP擁塞控制算法。
如果ECS實例中的應用僅對內(nèi)網(wǎng)提供服務,建議參考下列命令,修改TCP擁塞控制算法為cubic。因為內(nèi)網(wǎng)環(huán)境帶寬高、時延低。
sysctl -w net.ipv4.tcp_congestion_control=cubic sh -c "echo 'net.ipv4.tcp_congestion_control=cubic'" >> /etc/sysctl.d/50-aliyun.conf
修改相應網(wǎng)卡的調(diào)度策略。
如果ECS實例中的應用對外提供服務,建議繼續(xù)使用BBR算法,但需要將相應網(wǎng)卡的調(diào)度策略修改為tc-fq。修改的命令如下。
tc qdisc add dev <$Dev> root fq
說明<$Dev>指需要調(diào)整的網(wǎng)卡名稱。
使用BBR算法時,不建議使用其他非tc-fq的調(diào)度策略。因為這樣會占用更多額外的CPU資源。
建議您升級ECS實例的內(nèi)核至
kernel-4.19.57-15.al7
及之后的版本,徹底解決該問題。