ネットワークインターフェースコントローラー (NIC) マルチキューを使用すると、NIC 上に複数の送信 (Tx) キューと受信 (Rx) キューを構成でき、各キューは個別の CPU コアによって処理されます。これにより、パケット処理を複数の CPU コアに分散することで、ネットワーク I/O スループットが向上し、レイテンシーが低減されます。
利点
従来のシングルキュー NIC は、すべてのネットワークパケットを処理するために 1 つの CPU コアのみを使用するため、ボトルネックが発生します。単一のコアが過負荷になり、他のコアがアイドル状態のままになるため、レイテンシーの増加とパケット損失が発生します。
マルチキュー NIC は、ネットワークトラフィックを複数の CPU コアに分散し、マルチコアアーキテクチャを最大限に活用します。テスト結果によると、2 つのキューを使用するとパフォーマンスが 50~100% 向上し、4 つのキューを使用するとさらに大幅な向上が見られます。
主な利点:
CPU 使用率の向上:ネットワークトラフィックを複数のコアに分散します。
スループットの向上:特に高負荷時に複数のパケットを同時に処理します。
レイテンシーの低減:パケットをキュー全体に分散することで輻輳を軽減します。
パケットドロップの削減:高トラフィックシナリオでのパケット損失を防ぎます。
不適切な構成 (不正確なキュー数または CPU アフィニティ設定) は、パフォーマンスを低下させる可能性があります。セットアップを最適化するには、このトピックのガイダンスに従ってください。
仕組み
キューアーキテクチャ
Elastic Network Interface (ENI) は、複数の結合キューをサポートしています。各結合キューは、1 つの Rx キュー (受信) と 1 つの Tx キュー (送信) で構成され、独立した CPU コアによって処理されます。
Rx キュー:ポーリングやフローベースの分散などのルールに基づいて分散される受信パケットを処理します。
Tx キュー:順序や優先度などの要因に基づいて送信される送信パケットを処理します。
IRQ アフィニティ
各キューには独立した割り込みがあります。割り込み要求 (IRQ) アフィニティは、異なるキューの割り込みを特定の CPU コアに分散し、単一のコアが過負荷になるのを防ぎます。
IRQ アフィニティは、Red Hat Enterprise Linux (RHEL) を除くすべてのイメージでデフォルトで有効になっています。RHEL の構成については、「IRQ アフィニティの構成」をご参照ください。
前提条件
マルチキュー設定を構成する前に、次のことを確認してください。
NIC マルチキュー機能をサポートする ECS インスタンス (「インスタンスファミリーの概要」をご参照ください)。
ENI 設定を変更するための適切な権限。
(オプション) RHEL での IRQ アフィニティ構成の場合:
ecs_mqスクリプトをダウンロードするためのパブリックネットワークアクセス。
インスタンスタイプのサポート
インスタンスタイプがマルチキューをサポートしているかどうかを確認するには:
インスタンスタイプ表の [NIC キュー] 列を表示します。
1 より大きい値はマルチキューのサポートを示します。
この値は、ENI あたりの最大キュー数を示します。
DescribeInstanceTypes API 操作を呼び出して、キューメトリックをクエリします:
パラメーター | 説明 |
| プライマリ ENI のデフォルトキュー |
| セカンダリ ENI のデフォルトキュー |
| ENI ごとに許可される最大キュー数 |
| インスタンスの総キュークォータ |
カーネルバージョンが 2.6 より前の初期バージョンのパブリックイメージは、マルチキューをサポートしない場合があります。最高の互換性を得るには、最新のパブリックイメージを使用してください。
キュー構成の表示
コンソールでの表示
ECS コンソールの ENI ページに移動します。
上部のナビゲーションバーで、リージョンとリソースグループを選択します。
ENI ID をクリックして、詳細を表示します。
[基本情報] セクションで、[キュー] パラメーターを確認します。
キュー数を変更した場合、新しい値がここに表示されます。
キュー数を変更したことがない場合:
ENI がバインドされていない場合は値なし。
ENI がインスタンスにバインドされている場合はデフォルトのキュー数。
API を使用した表示
「DescribeNetworkInterfaceAttribute」API 操作を呼び出し、応答内の QueueNumber パラメーターを確認します。
Linux インスタンスでの表示
ワークベンチを使用して、ご利用の Linux インスタンスに接続します。
説明キュー構成は Linux インスタンスでのみ表示できます。Windows インスタンスの場合は、コンソールまたは API を使用してください。
ip address showを実行して、ネットワークインターフェースを表示します。
ENI でマルチキューが有効になっているかどうかを確認します (例では
eth0を使用)。ethtool -l eth0出力で:
Pre-set maximums - Combined:ENI でサポートされる最大キュー数。
Current hardware settings - Combined:現在使用中のキュー数。
3 つのキューがサポートされ、3 つのキューが使用中であることを示す出力例:

キュー構成の変更
ENI をインスタンスにバインドすると、ENI のキュー数はそのインスタンスタイプのデフォルトに自動的に設定されます。必要に応じて、この構成を手動で変更できます。
最大キュー数の変更 (コンソールまたは API)
コンソールまたは API を使用して、ENI でサポートされる最大キュー数を変更できます。
要件:
要件 | 説明 |
ENI の状態 | Available 状態であるか、バインドされているインスタンスが Stopped 状態である必要があります。 |
キュー制限 | インスタンスタイプの |
総クォータ | すべての ENI の総キュー数は、 |
コンソールを使用:
ENI ページに移動します。
ENI を見つけて、その ID をクリックして詳細を表示します。
[基本情報] セクションで、[キュー] の横にある編集アイコンをクリックします。
新しいキュー数を入力し、[OK] をクリックします。
ENI がインスタンスにバインドされている場合、新しいキュー数はインスタンスの起動後に有効になります。
API を使用:
「ModifyNetworkInterfaceAttribute」API 操作を呼び出し、QueueNumber パラメーターを指定します。
OS でのキュー使用量の変更 (Linux のみ)
オペレーティングシステムで ENI がアクティブに使用するキュー数を調整できます。この数は、ENI でサポートされる最大キュー数以下である必要があります。
OS レベルで行われた変更:
コンソールに表示されるキュー数や API 操作によって返されるキュー数には影響しません。
インスタンスの再起動後も保持されません。OS は利用可能な最大キュー数を使用するように復元されます。
Alibaba Cloud Linux 3 を使用した例:
ワークベンチを使用して、ご利用の Linux インスタンスに接続します。
現在のキュー構成を確認します。
ethtool -l eth0使用中のキュー数を変更します (例では 2 に変更)。
sudo ethtool -L eth0 combined 22を希望するキュー数に置き換えます (事前設定された最大値を超えることはできません)。変更を確認します。
ethtool -l eth0Current hardware settings - Combined の値が新しいキュー数を示すはずです。
IRQ アフィニティの構成
IRQ アフィニティは、異なるキューの割り込みを特定の CPU に割り当て、CPU 競合を減らすことでネットワークパフォーマンスを向上させます。
IRQ アフィニティは、RHEL を除くすべてのイメージでデフォルトで有効になっています。構成は RHEL インスタンスでのみ必要です。
RHEL インスタンスの要件
Red Hat Enterprise Linux 9.2 以降
ecs_mqスクリプトをダウンロードするためのパブリックネットワークアクセスirqbalanceサービスが無効になっていること (ecs_mqと競合するため)
RHEL での IRQ アフィニティの構成
ワークベンチを使用して、ご利用の RHEL インスタンスに接続します。
(オプション) 競合を防ぐために
irqbalanceサービスを無効化します。systemctl stop irqbalance.serviceecs_mqスクリプトパッケージをダウンロードします。wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.5.tgzパッケージを抽出します。
tar -xzf ecs_mq_2.0.5.tgzスクリプトディレクトリに移動します。
cd ecs_mq/スクリプト環境をインストールします (
redhatと9をご利用の OS 名とメジャーバージョンに置き換えます)。bash install.sh redhat 9ecs_mqサービスを開始します。systemctl start ecs_mqIRQ アフィニティが有効になりました。
ecs_mq 2.0.5 の利点
ecs_mq スクリプトの新しいバージョンには、いくつかの改善点があります。
ENI の PCIe インターフェースに関連付けられた NUMA (Non-Uniform Memory Access) ノード上の CPU に割り込みを優先的にバインドします。
複数のネットワークデバイスのチューニングロジックを最適化します。
キューと CPU の比率に基づいて割り込みをバインドします。
CPU シブリング位置に基づいてバインドを最適化します。
NUMA ノード間のメモリアクセス中に発生する高レイテンシーの問題を解決します。
パフォーマンスの向上:ネットワークパフォーマンスのテストでは、以前のバージョンと比較して、ほとんどの PPS (1 秒あたりのパケット数) および bps (1 秒あたりのビット数) メトリックで 5~30% の向上が見られます。
パフォーマンスの最適化
最適なネットワークパフォーマンスを実現するには、ワークロードに基づいてキュー数と IRQ アフィニティを構成します。ロードバランシングを確保するには:
ネットワーク負荷に基づいて、CPU コアあたりの適切なキュー数を割り当てます。
システムの実際のスループットとレイテンシー要件に従って IRQ アフィニティを構成します。
特定のワークロードに最適な設定を見つけるために、さまざまな構成をテストします。
CPU 使用率とネットワークメトリック (スループット、レイテンシー、パケット損失) を監視して、構成の有効性を評価します。