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

Elastic Compute Service:NIC マルチキュー

最終更新日:May 16, 2026

パケット処理を複数の CPU コアに分散させることで、ネットワークスループットを向上させ、レイテンシーを削減します。

NIC マルチキューを使用する理由

単一キューのネットワークインターフェースは、すべてのパケットを 1 つの CPU コアで処理するため、CPU の過負荷、レイテンシーの増加、パケット損失を引き起こす可能性があります。NIC マルチキューは、トラフィックを複数のコアに分散させることで、リソース使用率を向上させます。

同じ PPS と帯域幅の条件下では、2 つのキューを使用すると、単一キューに比べてネットワークパフォーマンスが 50% から 100% 向上します。4 つのキューでは、さらに大きな効果が得られます:

  • マルチコア使用率の向上:トラフィックを CPU コア間に分散させることで、負荷を均等にし、使用率を高めます。

  • スループットの向上:パケットの並列処理により、特に高負荷時のスループットが向上します。

  • レイテンシーの削減:パケットを複数のキューに分散させることで、輻輳とレイテンシーを削減します。

  • パケット損失の削減:高トラフィック時に単一キューが過負荷になることによるパケット損失を防ぎます。

不適切な設定は、パフォーマンスを低下させる可能性があります。例えば、不正確なキュー数や CPU アフィニティの設定は不要なコンテキストスイッチを引き起こし、キュー数が少なすぎるとハードウェアリソースを十分に活用できません。

Elastic Network Interface (ENI) がインスタンスにアタッチされると、そのキュー数にはインスタンスタイプのデフォルト値が設定されます。キュー数を手動で調整するには、まずユースケースとハードウェアの状況を評価してください。

NIC マルチキューの仕組み

  • キューアーキテクチャ

    ENI は複数の複合キューをサポートしており、各キューは独立した CPU コアによって処理されます。これにより、パケットの並列処理が可能になり、ロック競合が減少し、マルチコアのパフォーマンスを最大限に活用できます。

    受信 (RX) キューと送信 (TX) キューは、パケット処理に使用される 2 種類のキューです。各複合キューは、1 つの RX キューと 1 つの TX キューで構成されます:

    • RX キュー:着信パケットを処理します。ネットワークインターフェースは、Receive Side Scaling (RSS) のルール (ラウンドロビンやフローベースのハッシュ化など) に基づいて、各パケットを特定の RX キューに分散します。

      一部のインスタンスファミリーは、ENI のカスタム RSS をサポートしています。これは、ハッシュアルゴリズムを使用してトラフィックを異なる RX キューに分散します。

    • TX キュー:送信パケットを管理します。アプリケーションはパケットを TX キューに配置し、ネットワークインターフェースはシーケンスや優先度に基づいてパケットを送信します。

  • IRQ アフィニティのサポート

    各キューには独立した割り込みがあります。IRQ アフィニティは、割り込み処理を CPU コア間に分散させることで、単一のコアが過負荷になるのを防ぎます。

    Red Hat Enterprise Linux を除くすべてのパブリックイメージでは、IRQ アフィニティはデフォルトで有効になっています。詳細については、「IRQ アフィニティの設定」をご参照ください。

制限事項

  • NIC マルチキューをサポートしているのは、一部のインスタンスタイプのみです。「インスタンスファミリー」をご参照ください。 [Multi-queue] 列の値が 1 より大きい場合、そのインスタンスタイプは NIC マルチキューをサポートしています。

    • サポートされているインスタンスタイプでは、ENI をアタッチすると NIC マルチキューが自動的に有効になります。

    • インスタンスタイプに記載されているキュー数は、そのタイプがサポートする ENI あたりの最大キュー数です。

    • DescribeInstanceTypes API を InstanceTypeFamily パラメーターを指定して呼び出し、キュー関連のメトリクスを照会します:

      • デフォルトのキュー数

        PrimaryEniQueueNumber:プライマリ ENI のデフォルトのキュー数です。SecondaryEniQueueNumber:セカンダリ ENI のデフォルトのキュー数です。

      • ENI あたりの最大キュー数

        MaximumQueueNumberPerEni:インスタンスファミリーの ENI あたりの最大キュー数です。

      • 合計キュークォータ

        TotalEniQueueQuantity:インスタンスファミリーの合計キュークォータです。

  • カーネルバージョンが 2.6 より前のパブリックイメージは、NIC マルチキューをサポートしていない場合があります。最新のパブリックイメージを使用してください。

ENI のキュー数の表示

コンソールの使用

  1. ECS コンソール - ENI に移動します。

  2. 上部メニューで、対象リソースのリージョンとリソースグループを選択します。 地域

  3. 対象のセカンダリ ENI ID をクリックして、詳細ページを開きます。

  4. キュー数 セクションで、[キュー] パラメーターを確認します。この値が現在のキュー数です。

    image

    • キュー数を変更した場合、変更後の値が表示されます。

    • キュー数を変更していない場合:

API の使用

DescribeNetworkInterfaceAttribute API を呼び出します。レスポンスパラメーター QueueNumber がキュー数を示します。

  • キュー数を変更した場合、変更後の値が表示されます。

  • キュー数を変更していない場合:

インスタンス内での確認

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

    説明

    Windows インスタンスの場合は、ECS コンソールまたは API を呼び出して ENI のキュー数を表示します。

  2. ip a を使用してネットワーク設定を表示します:

    image

  3. プライマリ ENI eth0 が NIC マルチキューをサポートしているかどうかを確認します。

    この例ではプライマリ ENI を使用します。セカンダリ ENI を確認するには、識別子を eth1、eth2 などに置き換えます。

    ethtool -l eth0

    出力を確認します:

    • 「事前設定の最大値」の「Combined」が 1 より大きい場合、ENI は NIC マルチキューをサポートしています。この値が 最大キュー数です。

    • 「現在のハードウェア設定」の「Combined」が、現在使用中のキュー数です。

    この例では、ENI は最大 3 つの複合 (RX+TX) キューをサポートし、現在 3 つを使用しています。

    image

ENI のキュー数の変更

ENI をインスタンスにアタッチすると、そのキュー数にはインスタンスタイプのデフォルト値が設定されます。コンソールまたは API を呼び出すことで調整できます。次の点にご注意ください:

コンソールの使用

  1. ECS コンソール - ENI に移動します。

  2. 上部メニューで、対象リソースのリージョンとリソースグループを選択します。 地域

  3. 対象のセカンダリ ENI ID をクリックして、詳細ページを開きます。

  4. [キュー数の変更] をクリックします。

    image

  5. [OK] をクリックします。

API の使用

ModifyNetworkInterfaceAttribute API を呼び出し、QueueNumber パラメーターを設定してキュー数を変更します。

新しいキュー数は、アタッチされたインスタンスが次回起動したときに有効になります。

OS のキュー数の変更

ENI のキュー数を変更すると、OS は自動的に新しい設定を適用します。

また、ENI が 実際に使用する キューの数を調整することもできます。この値は、設定されたキュー数以下である必要があります。

説明
  • OS が使用するキュー数を変更しても、ENI に設定されたキュー数には影響せず、コンソールや API のレスポンスにも表示されません。

  • この変更は一時的なものであり、インスタンスを再起動すると維持されません。

以下の例では、NIC マルチキューを備えた Alibaba Cloud Linux 3 インスタンスでキュー数を調整します。

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

  2. ip address show を使用してネットワーク設定を表示します:

    image

  3. プライマリ ENI eth0 が NIC マルチキューをサポートしているかどうかを確認します。

    この例ではプライマリ ENI を使用します。セカンダリ ENI を確認するには、識別子を eth1、eth2 などに置き換えます。

    ethtool -l eth0
  4. 出力を確認します:

    • 「事前設定の最大値」の「Combined」が 1 より大きい場合、ENI は NIC マルチキューをサポートしています。この値が 最大キュー数です。

    • 「現在のハードウェア設定」の「Combined」が、現在使用中のキュー数です。

    この例では、ENI は最大 3 つの複合 (RX+TX) キューをサポートし、3 つが使用中です。

    image

  5. プライマリ ENI eth0 の使用するキュー数を 2 に設定します。

    この例ではプライマリ ENI を使用します。セカンダリ ENI を調整するには、識別子を eth1、eth2 などに置き換えます。

    sudo ethtool -L eth0 combined N

    N は、ENI が使用するキューの数です。N は、「事前設定の最大値」の「Combined」の値以下である必要があります。

    プライマリ ENI のキュー数を 2 に設定します:

    sudo ethtool -L eth0 combined 2

IRQ アフィニティの設定

NIC マルチキューは通常、IRQ アフィニティの設定を必要とします。これにより、異なるキューからの割り込みを特定の CPU コアに割り当て、競合を減らし、パフォーマンスを向上させます。

説明
  • Red Hat Enterprise Linux を除くすべてのパブリックイメージでは、IRQ アフィニティはデフォルトで有効になっています。

  • Red Hat Enterprise Linux は IRQ アフィニティをサポートしていますが、デフォルトでは有効になっていません。以下の手順に従って設定してください。

以下の手順では、ecs_mq スクリプトを使用して、Red Hat Enterprise Linux 9.2 イメージで IRQ アフィニティを設定します。他のイメージでは、IRQ アフィニティはデフォルトで有効になっています。

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

  2. (オプション) irqbalance サービスを停止します。

    irqbalance サービスは IRQ アフィニティを動的に調整するため、ecs_mq と競合する可能性があります。最初にこのサービスを停止してください。

    systemctl stop irqbalance.service
  3. 最新の ecs_mq スクリプトをダウンロードします:

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

    ecs_mq の最新バージョンでの修正点

    以前のecs_mqと比較した最新のecs_mqの修正点:

    • ENI の PCIe デバイスと同じ NUMA ノード上の CPU に割り込みを優先的にバインドします。

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

    • NIC キューと CPU コアの比率に基づいて割り込みバインディングロジックを調整します。

    • CPU シブリングの位置に基づいて割り込みバインディングを最適化します。

    • 以前のバージョンで発生していた、NUMA をまたぐバインディングによるメモリアクセスレイテンシーの増加を修正します。

    • ecs_mq の新しいモードはデフォルトで有効になっています。モードを切り替えるには:

      • ecs_mq の旧モード: ecs_mq_rps_rfs old

      • ecs_mq の新モード: ecs_mq_rps_rfs new

    • 一部のシステムで ENI のホットプラグ中に ethtool コマンドが見つからず、ecs_mq_rps_rfs が失敗する問題を修正します。

    説明

    新しい ecs_mq は、ほとんどの PPS および BPS ネットワークテストにおいて、古い ecs_mq よりも 5% から 30% のネットワークパフォーマンス向上を実現します。

  4. ecs_mq パッケージを解凍します:

    tar -xzf ecs_mq_latest.tgz
  5. 作業ディレクトリに移動します:

    cd ecs_mq/
  6. ecs_mq インストールスクリプトを実行します:

    bash install.sh redhat 9
    説明

    redhat9 を、お使いのオペレーティングシステムの名前とメジャーバージョン番号に置き換えてください。

  7. ecs_mq サービスを開始します:

    systemctl start ecs_mq

    このサービスは自動的に IRQ アフィニティを有効にします。

スループットとレイテンシーを監視しながら、さまざまなキュー数と IRQ アフィニティの組み合わせをテストして、最適なバランスを見つけてください。