ネットワークインターフェースコントローラ (NIC) マルチキュー機能により、NICは複数の受信 (RX) キューと送信 (TX) キューのデータパケットを並行して処理できます。 NICマルチキュー機能を使用する場合は、割り込みを任意のCPUに割り当てるのではなく、異なるキューの割り込みを特定のCPUに割り当てるように割り込み要求 (IRQ) アフィニティを設定する必要があります。 これにより、CPU間の競合が減り、ネットワークパフォーマンスが向上します。 このトピックでは、Linux Elastic Compute Service (ECS) インスタンスのNICでIRQアフィニティを設定し、キュー数を変更する方法について説明します。
前提条件
NICマルチキュー機能は、Linux ECSインスタンスのインスタンスタイプでサポートされています。
NICマルチキュー機能をサポートするインスタンスタイプについては、「インスタンスファミリーの概要」をご参照ください。 インスタンスタイプのNICキューの数が1より大きい場合、インスタンスタイプはNICマルチキュー機能をサポートしています。
NICマルチキュー機能は、Linux ECSインスタンスのイメージでサポートされています。
重要2.6より前のカーネルバージョンを含む特定の初期バージョンのパブリックイメージは、NICマルチキュー機能をサポートしていない場合があります。 最新のパブリックイメージを使用することを推奨します。
デフォルトでは、IRQ Affinityは、Red Hat Enterprise Linuxイメージを除いて、追加の構成を必要とせずにすべてのイメージで有効になります。
IRQ AffinityはRed Hat Enterprise Linuxイメージでサポートされていますが、デフォルトではイメージに対して有効になっていません。 Red Hat Enterprise Linuxイメージを使用するインスタンスのIRQ Affinityを構成するには、このトピックで説明する操作を実行します。
NICのキュー数の変更、IRQ Affinityの設定、または上記の両方の操作を実行して、ネットワークパフォーマンスを最適化できます。 負荷分散を確保するには、各CPUコアに適切な数のキューを割り当て、スループットやレイテンシなど、システムの実際の負荷とパフォーマンスデータに基づいてIRQ Affinityを設定します。 システムのパフォーマンスデータを取得するには、さまざまなNICキューおよびIRQ Affinity設定をテストします。
IRQアフィニティの設定
このセクションでは、ecs_mq
スクリプトを使用して、Red Hat 9.2イメージを使用するLinux ecsインスタンスのIRQアフィニティを設定する方法について説明します。 イメージがRed Hat Enterprise Linuxイメージでない場合、IRQ Affinityはデフォルトで有効になっています。 IRQアフィニティを設定する必要はありません。
Linux ECSインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
(オプション) irqbalanceサービスを無効にします。
irqbalanceサービスは、IRQ Affinity設定を動的に変更します。
ecs_mq
スクリプトはirqblanaceサービスと競合します。 irqbalanceサービスを無効にすることを推奨します。systemctl stop irqbalance.service
次のコマンドを実行して、新しいバージョンの
ecs_mq
スクリプトを含むパッケージをダウンロードします。wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz
次のコマンドを実行して、
ecs_mq
スクリプトを抽出します。tar -xzf ecs_mq_2.0.tgz
次のコマンドを実行して、作業パスを変更します。
cd ecs_mq/
次のコマンドを実行して、
ecs_mq
スクリプトの実行に必要な環境をインストールします。bash install.sh redhat 9
説明redhatと9を実際の
オペレーティングシステム名
とオペレーティングシステムのメジャーバージョン番号
に置き換えます。次のコマンドを実行して、
ecs_mq
スクリプトを開始します。systemctl start ecs_mq
スクリプトの開始後、IRQ Affinityは自動的に有効になります。
NICキュー数の変更
この例では、Alibaba Cloud Linux 3を実行するECSインスタンスが使用されています。 Alibaba Cloud Linux 3は、NICマルチキュー機能をサポートしています。
テスト結果は、同一のパケット転送速度およびネットワーク帯域幅条件下では、2つのキューが単一のキューよりも100% に50% し、4つのキューを使用するとパフォーマンスの向上が大幅に向上することを示しています。 ネットワークパフォーマンスのテスト方法については、「インスタンスのネットワークパフォーマンスのテスト」をご参照ください。 ビジネス要件に基づいて、NICのキュー数を変更できます。
Linux ECSインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
ip address show
コマンドを実行して、ネットワーク設定を表示します。次のコマンドを実行して、プライマリENI eth0でNICマルチキュー機能が有効になっているかどうかを確認します。
ethtool -l eth0
コマンド出力を表示して、NICマルチキュー機能が有効かどうかを確認します。
[プリセット最大値] セクションの [結合] フィールドの値が1より大きい場合、NICはマルチキュー機能をサポートします。
sudo ethtool -L eth0 Combined N
コマンドを実行すると、[プリセット最大値] セクションの [結合] フィールドの値に基づいて有効なキューの数を指定できます。 コマンドでは、N
は有効なキューの数を指定します。N
は、プリセット最大値セクションのCombinedフィールドの値以下でなければなりません。Current hardware settingsセクションのCombinedフィールドの値は、有効なキューの数を示します。
次のコマンド出力は、NICが最大2つのキューをサポートし、1つのキューが有効であることを示します。
eth0の
Channel parameters for eth0: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 2 # This value indicates that the ENI supports up to two queues. Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 1 # This value indicates that one queue is in effect on the ENI.
次のコマンドを実行して、2つのキューを使用するようにプライマリENIを設定します。
sudo ethtool -L eth0 combined 2
次のコマンドを実行して、セカンダリENI eth1でNICマルチキュー機能が有効になっているかどうかを確認します。
ethtool -l eth1
次のコマンド出力は、セカンダリENIでNICマルチキュー機能が有効になっていることを示しています。 セカンダリENIのキュー数を設定するには、次の手順を実行します。
eth1の
Channel parameters for eth1: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 # This value indicates that the ENI supports up to four queues. Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 1 # This value indicates that one queue is in effect on the ENI.
次のコマンドを実行して、4つのキューを使用するようにセカンダリENIを設定します。
sudo ethtool -L eth1 combined 4
関連ドキュメント
IRQアフィニティの詳細については、「IRQアフィニティ」をご参照ください。
ENIの作成方法については、「セカンダリENIの作成」をご参照ください。
ENIをバインドする方法の詳細については、「セカンダリENIのバインド」をご参照ください。