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

Elastic Compute Service:NIC マルチキュー

最終更新日:Mar 26, 2026

NIC マルチキューを使用すると、ネットワークインターフェースで複数の送受信キューを構成できます。各キューは異なる CPU コアによって処理されます。その目的は、複数の CPU コアにわたってネットワークパケットを並列処理することで、ネットワーク I/O スループットを向上させ、レイテンシーを低減することです。

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

従来のシングルキューネットワークインターフェースは、すべてのパケットを処理するために 1 つの CPU コアに依存しています。これにより、CPU 過負荷、レイテンシーの増加、およびパケット損失が発生する可能性があります。最新のサーバーにはマルチコア CPU が搭載されており、NIC マルチキューはこれらのコアにネットワークトラフィックを分散させ、より効率的なリソース利用率を実現します。

同じネットワーク PPS および帯域幅の条件下で、テストでは 1 つのキューの代わりに 2 つのキューを使用すると、ネットワークパフォーマンスが 50% から 100% 向上することが示されています。4 つのキューを使用すると、さらに大きなメリットが得られます。

  • マルチコア CPU アーキテクチャのより良い利用: ネットワークトラフィックを複数の CPU コアに分散させ、負荷のバランスをとり、CPU 使用率を向上させます。

  • スループットの向上: 複数のパケットを同時に処理することで、特に高負荷時にネットワークスループットが大幅に向上します。

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

  • パケット損失の低減: 高トラフィック時に過負荷状態のシングルキューによって引き起こされるパケット損失を軽減します。

NIC マルチキューはこれらのメリットを提供しますが、不適切な構成はパフォーマンスを低下させたり、他の問題を引き起こしたりする可能性があります。たとえば、キュー数や CPU アフィニティの設定が正しくないと、不要なコンテキストスイッチングのオーバーヘッドが発生する可能性があります。キュー数を低く設定しすぎると、ハードウェアリソースを十分に活用できない場合があります。

通常、Elastic Network Interface (ENI) がインスタンスにアタッチされると、そのキュー数はインスタンスタイプに応じたデフォルト値に自動的に設定され、この設定はオペレーティングシステム内で有効になります。ENI のキュー数を手動で調整する必要がある場合は、まず特定のユースケースとハードウェア条件を慎重に検討し、最適な構成を決定する必要があります。

NIC マルチキューの仕組み

  • キューアーキテクチャ

    Elastic Network Interface (ENI) は複数の結合キューをサポートしています。各結合キューは独立した CPU コアによって処理され、並列パケット処理を可能にし、ロック競合を低減し、マルチコアパフォーマンスを最大限に活用します。

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

    • RX キュー: RX キューは、ネットワークからの受信データパケットを処理するために使用されます。パケットが到着すると、ネットワークインターフェースはラウンドロビンやフローベースのハッシュ化などの分散戦略に基づいて、特定の RX キューにパケットを分散します。

    • TX キュー: TX キューは、送信データパケットを管理するために使用されます。アプリケーションは生成されたパケットを TX キューに配置し、ネットワークインターフェースはシーケンスや優先度などの要因に基づいてそれらを送信します。

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

    各キューは独立した割り込みに関連付けられています。IRQ アフィニティは、割り込み処理を異なる CPU コアに分散させ、単一のコアが過負荷になるのを防ぎます。

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

制限事項

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

    • NIC マルチキューをサポートするインスタンスタイプの場合、ENI をインスタンスにアタッチすると、この機能は自動的に有効になります。

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

    • DescribeInstanceTypes API オペレーションを呼び出し、InstanceTypeFamily パラメーターを指定することで、インスタンスタイプファミリーのキュー関連メトリクスをクエリできます。

      • デフォルトキュー数

        PrimaryEniQueueNumber レスポンスパラメーターは、プライマリ ENI のデフォルトキュー数を示します。SecondaryEniQueueNumber パラメーターは、セカンダリ ENI のデフォルトキュー数を示します。

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

        MaximumQueueNumberPerEni レスポンスパラメーターは、インスタンスタイプファミリーに許可される ENI あたりの最大キュー数を示します。

      • 合計キュークォータ

        TotalEniQueueQuantity レスポンスパラメーターは、インスタンスタイプファミリーに許可される合計キュークォータを示します。

  • カーネルバージョン 2.6 以前の一部の古いパブリックイメージは、NIC マルチキューをサポートしない場合があります。最新のパブリックイメージを使用することを推奨します。

ENI キュー数の確認

コンソール

  1. ECS コンソール - Elastic Network Interfaces にアクセスします。

  2. 上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。Region

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

  4. 基本情報」セクションで、「キュー」パラメーターを見つけます。この値は、ENI の現在のキュー数を示します。

    image

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

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

API

DescribeNetworkInterfaceAttribute オペレーションを呼び出すことで、ENI のキュー数を確認できます。応答の QueueNumber パラメーターはキュー数を示します。

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

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

インスタンス内

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

    説明

    Windows インスタンスの場合、コンソールまたは API オペレーションを呼び出すことで ENI キュー数を確認できます。

    詳細については、「ワークベンチを使用して Linux インスタンスにログインする」をご参照ください。

  2. ip a コマンドを実行して、ネットワーク構成情報を確認します。

    image

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

    この例ではプライマリ ENI を使用しています。セカンダリ ENI を確認するには、ネットワークインターフェース識別子を eth1、eth2、または別の値に置き換えます。

    ethtool -l eth0

    コマンド出力で NIC マルチキューがサポートされているかどうかを確認します。

    • [Pre-set maximums] の下の "Combined" の値が 1 より大きい場合、ENI は NIC マルチキューをサポートしています。この値は、ENI がサポートする最大キュー数を示します。

    • [Current hardware settings] の下の "Combined" の値は、現在使用中のキュー数を示します。

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

    image

ENI キュー数の変更

ENI のキュー数はインスタンスにアタッチされる際にデフォルト値に設定されますが、コンソールまたは API を使用して手動で調整できます。

コンソール

  1. ECS コンソール - Elastic Network Interfaces にアクセスします。

  2. 上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。Region

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

  4. [Modify Queue Count] をクリックします。

    image

  5. [OK] をクリックして変更を完了します。

API

ModifyNetworkInterfaceAttribute オペレーションを呼び出し、QueueNumber パラメーターを設定することで、ENI のキュー数を変更できます。

インスタンスにアタッチされている ENI のキュー数を変更すると、インスタンスの起動後に新しい設定が有効になります。

OS キュー数の変更

コンソールまたは API を使用してENI のキュー数を変更すると、新しい設定は OS 内で自動的に有効になります。OS 内で ENI が使用するキュー数は、設定したキュー数と一致します。

ENI が OS 内でアクティブに使用するキュー数を調整することもできます。この値は、ENI に構成されているキュー数よりも少なくすることができます。

説明
  • インスタンス内でOS が使用するキュー数を変更しても、ENI がサポートする最大キュー数には影響せず、この変更はコンソールや API の応答には表示されません。

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

次の例は、NIC マルチキューをサポートする Alibaba Cloud Linux 3 インスタンスで ENI が使用するキュー数を調整する方法を示しています。

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

    詳細については、「ワークベンチを使用して Linux インスタンスにログインする」をご参照ください。

  2. ip address show コマンドを実行して、ネットワーク構成情報を確認します。

    image

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

    この例ではプライマリ ENI を使用しています。セカンダリ ENI を確認するには、ネットワークインターフェース識別子を eth1、eth2、または別の値に置き換えます。

    ethtool -l eth0
  4. コマンド出力で NIC マルチキューがサポートされているかどうかを確認します。

    • [Pre-set maximums] の下の "Combined" の値が 1 より大きい場合、ENI は NIC マルチキューをサポートしています。この値は、ENI がサポートする最大キュー数を示します。

    • [Current hardware settings] の下の "Combined" の値は、現在使用中のキュー数を示します。

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

    image

  5. 次のコマンドを実行して、プライマリ ENI eth0 のアクティブなキュー数を 2 に設定します。

    この例ではプライマリ ENI を使用しています。セカンダリ ENI を調整するには、ネットワークインターフェース識別子を eth1、eth2、または別の値に置き換えます。

    sudo ethtool -L eth0 combined N

    N は、ENI に使用させたいキュー数です。N は、[Pre-set maximums] の下の "Combined" の値以下である必要があります。

    この例では、プライマリ ENI のキュー数を 2 に設定します。

    sudo ethtool -L eth0 combined 2

IRQ アフィニティの構成

NIC マルチキューを使用する場合、通常は IRQ アフィニティを構成する必要があります。このプロセスは、異なるキューからの割り込みを特定の CPU コアに割り当て、任意のコアがそれらを処理するのを防ぎ、CPU 競合を低減し、ネットワークパフォーマンスを向上させるのに役立ちます。

説明
  • Red Hat Enterprise Linux (RHEL) を除くすべてのパブリックイメージでは、IRQ アフィニティはデフォルトで有効になっており、追加の構成は不要です。

  • RHEL イメージは NIC マルチキューの IRQ アフィニティをサポートしていますが、デフォルトでは無効になっています。このトピックの手順に従って構成してください。

次の手順は、ecs_mq スクリプトを使用して、Red Hat Enterprise Linux 9.2 イメージ上の NIC マルチキューの IRQ アフィニティを自動的に構成する方法を示しています。ご利用のインスタンスが RHEL イメージを使用していない場合、IRQ アフィニティはデフォルトで有効になっており、構成は不要です。

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

    詳細については、「ワークベンチを使用して Linux インスタンスにログインする」をご参照ください。

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

    irqbalance サービスは IRQ アフィニティを動的に調整するため、ecs_mq スクリプトと競合します。irqbalance サービスを停止することを推奨します。

    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 デバイスと同じ Non-Uniform Memory Access (NUMA) ノード上の CPU への割り込みバインディングを優先します。

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

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

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

    • 以前のバージョンでのクロス NUMA バインディングによって引き起こされるメモリアクセスレイテンシーの増加を修正します。

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

    • スクリプトの新しいモードはデフォルトで有効になっています。次のコマンドを使用して、ecs_mq スクリプトの新しいモードと古いモードを切り替えることができます。

      • ecs_mq の古いバージョンに切り替える: ecs_mq_rps_rfs old

      • ecs_mq の新しいバージョンに切り替える: ecs_mq_rps_rfs new

    説明

    ネットワーク性能テストでは、新しい ecs_mq は、古い ecs_mq と比較して、ほとんどの PPS および BPS でネットワークパフォーマンスを 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 アフィニティが有効になります。

NIC キュー数の変更と IRQ アフィニティの構成は、ネットワークパフォーマンスを最適化するための異なる方法です。ご利用のシステムの実際の負荷に基づいて、異なる構成の組み合わせをテストする必要があります。スループットやレイテンシーなどのパフォーマンスメトリクスを監視します。このデータを使用して、キューを異なる CPU コアに割り当て、IRQ アフィニティを設定し、最適な負荷分散を実現します。