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

Elastic Compute Service:NIC マルチキュー

最終更新日:Aug 21, 2026

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

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

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

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

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

  • スループットの向上:パケット処理を並列化することで、特に高負荷時のスループットを向上させます。

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

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

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

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. 「基本情報」セクションで、キュー数 パラメーターを探します。この値は現在のキュー数です。

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

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

API の使用

DescribeNetworkInterfaceAttribute API を呼び出します。応答パラメーター [QueueNumber] がキュー数を示します。

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

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

インスタンス内での確認

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

    説明

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

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

    [root@ixxxxx ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:1b:74:12 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.20.226/24 brd 172.16.20.255 scope global dynamic noprefixroute eth0
           valid_lft 315359814sec preferred_lft 315359814sec
        inet6 fe80::216:3eff:fe1b:7412/64 scope link
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:46:ff:fc brd ff:ff:ff:ff:ff:ff
        altname enp0s6
        altname ens6
        inet 172.16.20.227/24 brd 172.16.20.255 scope global dynamic noprefixroute eth1
           valid_lft 315359814sec preferred_lft 315359814sec
        inet6 fe80::216:3eff:fe46:fffc/64 scope link
           valid_lft forever preferred_lft forever
    4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:47:47:c2 brd ff:ff:ff:ff:ff:ff
        altname enp0s8
        altname ens8
        inet 172.16.20.228/24 brd 172.16.20.255 scope global dynamic noprefixroute eth2
           valid_lft 315359814sec preferred_lft 315359814sec
        inet6 fe80::216:3eff:fe47:47c2/64 scope link
           valid_lft forever preferred_lft forever
  3. プライマリ ENI の eth0 が NIC マルチキューをサポートしているか確認します。

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

    ethtool -l eth0

    出力を確認します:

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

    • 「Current hardware settings」 の下の 「Combined」 が、現在使用中のキュー数 です。

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

    [root@xxx          ~]# ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:             n/a
    TX:             n/a
    Other:          n/a
    Combined:       3
    Current hardware settings:
    RX:             n/a
    TX:             n/a
    Other:          n/a
    Combined:       3

ENI のキュー数の変更

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

コンソールの使用

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

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

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

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

    [NIC キュー番号] フィールドの横にある編集アイコンをクリックし、入力ボックスにターゲットキュー番号を入力します (有効範囲: 1~2048)。

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

API の使用

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

新しいキュー数は、アタッチされているインスタンスの次回の起動時に有効になります。

OS が使用するキュー数の変更

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

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

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

  • この変更は一時的なものであり、インスタンスを再起動すると元に戻ります。

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

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

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

    [ecs-user@iZbpxxx ~]$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:16:3e:37:7a:82 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.0.20/24 brd 172.16.0.255 scope global dynamic noprefixroute eth0
           valid_lft 315359878sec preferred_lft 315359878sec
        inet6 fe80::216:3eff:fe37:7a82/64 scope link
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:16:3e:28:b1:9e brd ff:ff:ff:ff:ff:ff
        altname enp0s6
        altname ens6
        inet 172.16.0.21/24 brd 172.16.0.255 scope global dynamic noprefixroute eth1
           valid_lft 315359879sec preferred_lft 315359879sec
        inet6 fe80::216:3eff:fe28:b19e/64 scope link
           valid_lft forever preferred_lft forever
  3. プライマリ ENI の eth0 が NIC マルチキューをサポートしているか確認します。

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

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

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

    • 「Current hardware settings」 の下の 「Combined」 が、現在使用中のキュー数 です。

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

    [root@xxx          ~]# ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:             n/a
    TX:             n/a
    Other:          n/a
    Combined:       3
    Current hardware settings:
    RX:             n/a
    TX:             n/a
    Other:          n/a
    Combined:       3
  5. プライマリ ENI eth0 のアクティブなキューの数を 2 に設定します。

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

    sudo ethtool -L eth0 combined N

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

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

    sudo ethtool -L eth0 combined 2

IRQ アフィニティの設定

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

説明
  • 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
    説明

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

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

    systemctl start ecs_mq

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

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