Alibaba Cloud Linux 2は、Reno、Bottleneck Bandwidth and Round-trip propagation time (BBR)、CUBICなどのカーネルTCP輻輳制御アルゴリズムをサポートしています。これらのアルゴリズムは、さまざまなネットワークシナリオで異なるパフォーマンスを発揮します。このトピックでは、BBRアルゴリズムがAlibaba Cloud Linux 2を実行するElastic Compute Service (ECS) インスタンスのネットワークパフォーマンスに影響を与える問題の原因と解決策について説明します。
問題の説明
BBRは、以下の構成を持つECSインスタンスのデフォルトのTCP輻輳制御アルゴリズムとして使用されます。インスタンスのCPU使用率とパケット転送速度が高い場合、BBRはそのネットワークパフォーマンスに影響を与え、Redis データベースのパフォーマンスを低下させるなどします。
イメージバージョン:
aliyun_2_1903_64_20G_alibase_20190619.vhd以前。カーネルバージョン:
kernel-4.19.48-14.al7以前。
原因
BBRアルゴリズムがカーネルTCP輻輳制御に使用されているにもかかわらず、ネットワークインターフェースの qdisc が fq スケジューラを使用していない場合、TCPスタックは内部の高解像度タイマー(hrtimer)にフォールバックします。これにより、接続ごとのCPU使用率が増加します。
解決策
BBRを別のアルゴリズムに置き換えます。
インスタンス上のアプリケーションが内部ネットワークのみでサービスを提供している場合は、次のコマンドを実行してBBRをCUBICに置き換えます。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ネットワークインターフェースのスケジューリングポリシーを変更します。
インスタンス上のアプリケーションがインターネット経由でサービスを提供している場合は、次のコマンドを実行して、アプリケーションが使用するネットワークインターフェースのスケジューリングポリシーを
tc-fqに変更します。<$DEV>を実際のネットワークインターフェース名に置き換えます。sudo tc qdisc add dev <$DEV> root fqtc-fqスケジューリングポリシーを使用してCPU使用率を削減します。インスタンスのカーネルを最新バージョンにアップグレードします。
警告カーネルのアップグレードは、互換性と安定性の問題を引き起こす可能性があります。 Alibaba Cloud Linux 2のリリースノート のカーネルの機能を確認し、カーネルバージョンをアップグレードする際は注意してください。
再起動操作によりインスタンスが一時的に停止し、実行中のサービスが中断され、データ損失につながる可能性があります。そのため、重要なインスタンスデータをバックアップしてから、オフピーク時にインスタンスを再起動してください。
最新のカーネルバージョンにアップグレードします。
sudo yum update kernel新しいカーネルバージョンを有効にするためにインスタンスを再起動します。
sudo reboot