すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:NICマルチキューのIRQアフィニティの設定とNIC上のキュー数の変更

最終更新日:Sep 06, 2024

ネットワークインターフェースコントローラ (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アフィニティを設定する必要はありません。

  1. Linux ECSインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. (オプション) irqbalanceサービスを無効にします。

    irqbalanceサービスは、IRQ Affinity設定を動的に変更します。 ecs_mqスクリプトはirqblanaceサービスと競合します。 irqbalanceサービスを無効にすることを推奨します。

    systemctl stop irqbalance.service
  3. 次のコマンドを実行して、新しいバージョンのecs_mqスクリプトを含むパッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz

    ecs_mqスクリプトの新バージョンの利点

    古いバージョンのecs_mqスクリプトと比較して、新しいバージョンには次の利点があります。

    • NICのPeripheral Component Interconnect Express (PCIe) インターフェイスが関連付けられているNUMA (Non-Uniform Memory Access) ノード上のCPUに、NICの割り込みを優先的にバインドします。

    • 複数のネットワークデバイスをチューニングするロジックを最適化します。

    • CPU数に対するNICキュー数の比率に基づいて、仕様の異なるNICの割り込みをバインドします。

    • CPU兄弟の位置に基づいて割り込みをバインドするメカニズムを最適化します。

    • NUMAノード間のメモリアクセス中に発生する可能性のある高レイテンシの問題を解決します。

    • デフォルトでecs_mqスクリプトの新しいバージョンを使用し、古いバージョンと新しいバージョンを切り替えるために使用できるコマンドを提供します。

      • ecs_mq_rps_rfs oldコマンドを使用して、古いバージョンのecs_mqスクリプトに切り替えます。

      • ecs_mq_rps_rfs newコマンドを使用して、ecs_mqスクリプトの新しいバージョンに切り替えます。

    説明

    ネットワークパフォーマンステストでは、新しいバージョンのecs_mqスクリプトは、ほとんどのPPSおよびBPSメトリックを30% する5% で、古いバージョンよりもパフォーマンスが優れています。

  4. 次のコマンドを実行して、ecs_mqスクリプトを抽出します。

    tar -xzf ecs_mq_2.0.tgz
  5. 次のコマンドを実行して、作業パスを変更します。

    cd ecs_mq/
  6. 次のコマンドを実行して、ecs_mqスクリプトの実行に必要な環境をインストールします。

    bash install.sh redhat 9
    説明

    redhatと9を実際のオペレーティングシステム名オペレーティングシステムのメジャーバージョン番号に置き換えます。

  7. 次のコマンドを実行して、ecs_mqスクリプトを開始します。

    systemctl start ecs_mq

    スクリプトの開始後、IRQ Affinityは自動的に有効になります。

NICキュー数の変更

この例では、Alibaba Cloud Linux 3を実行するECSインスタンスが使用されています。 Alibaba Cloud Linux 3は、NICマルチキュー機能をサポートしています。

説明

テスト結果は、同一のパケット転送速度およびネットワーク帯域幅条件下では、2つのキューが単一のキューよりも100% に50% し、4つのキューを使用するとパフォーマンスの向上が大幅に向上することを示しています。 ネットワークパフォーマンスのテスト方法については、「インスタンスのネットワークパフォーマンスのテスト」をご参照ください。 ビジネス要件に基づいて、NICのキュー数を変更できます。

  1. Linux ECSインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. ip address showコマンドを実行して、ネットワーク設定を表示します。

    image

  3. 次のコマンドを実行して、プライマリ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.
  4. 次のコマンドを実行して、2つのキューを使用するようにプライマリENIを設定します。

    sudo ethtool -L eth0 combined 2
  5. 次のコマンドを実行して、セカンダリ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.
  6. 次のコマンドを実行して、4つのキューを使用するようにセカンダリENIを設定します。

    sudo ethtool -L eth1 combined 4

関連ドキュメント

IRQアフィニティの詳細については、「IRQアフィニティ」をご参照ください。

ENIの作成方法については、「セカンダリENIの作成」をご参照ください。

ENIをバインドする方法の詳細については、「セカンダリENIのバインド」をご参照ください。