このページ
ソフトウェア受信側の拡張
概要
コンテンポラリーNICは、複数の受信および送信記述子キュー(マルチキュー)をサポートしています。受信時には、NIC は異なるパケットを別のキューに送信して、CPU 間で処理を分散できます。NIC は、少数の論理フローのいずれかに割り当てる各パケットにフィルターを適用することで、パケットを配信します。各フローのパケットは、個別の受信キューに誘導され、次に個別の CPU で処理できます。このメカニズムは、一般に RSS(受信側スケーリング)と呼ばれます。RSS 技術の目標は、一貫したパフォーマンスの向上です。遅延が懸念される場合、または受信割り込み処理がボトルネックになるたびに RSS が有効になります。CPU 間で負荷が分散すると、キューの長さが短くなります。低遅延ネットワークの場合、最適な設定は、システムに CPU があるのと同じ数のキュー(低い場合は NIC の最大値)を割り当てることです。最も効率的な高レート構成は、CPU の飽和により受信キューがオーバーフローしない、受信キューの数が最も少ない構成である可能性があります。受信側スケーリングを使用すると、ブリッジング スループットを向上させることができます。
フロースレッドアフィニティアーキテクチャとして、各フロースレッド(FLT)は、NICの専用受信キューからパケットをポーリングし、実行が完了するまでパケットを処理します。そのため、フロー スレッドはパケット処理のために NIC 受信(RX)および送信(TX)キューにバインドされ、不一致を回避します。したがって、マルチコアvSRXフレーバーをサポートするには、vSRXデータプレーンCPUの数と同じ数のRXおよびTXキューを持つ必要があります。ソフトウェアRSS(SWRSS)は、さまざまなFLTスレッドにソフトウェアベースのパケットスプレーを実装することで、vSRXマルチコアフレーバーを実行するために、NIC HWキューのこの制限を取り除きます。
ソフトウェア RSS は、個々のフローの処理を複数のカーネルのいずれかにオフロードするため、NIC からパケットを受け取るフロー スレッドはより多くのパケットを処理できます。RSS と同様に、SWRSS を使用した場合のネットワーク スループットの向上は、CPU 使用率と直線的な相関を持ちます。
SWRSS では、各 NIC ポートは、I/O スレッドの場合と同じかそれ以下のハードウェア RX/TX キューで初期化されます。I/O スレッドは、vSRX 内のすべての NIC インターフェイス間の合計データ パス CPU と最小 NIC キューに基づいて決定されます。たとえば、I/O スレッドを 4 として計算すると、NIC ポートあたりの HW キューの数は 4 キュー以下になります。
サポートされている vSRX インスタンスで FLT スレッドとして NIC に十分な数のキューがない場合、ソフトウェア RSS(SWRSS)はフロー型データ パスによって有効になります。SWRSS は、NIC 受信キューからパケットを取得した後、FLT 間でパケット配信のソフトウェア モデルを実装します。SWRSS は、NIC HW キューの制限を取り除くことで、さまざまな vSRX インスタンス タイプをサポートすることで vCPU の拡張に役立ちます。
I/O 操作中に、パケットは NIC ポートの受信キューからフェッチされ、パケット分類が実行されます。その後、FLT スレッド仮想キューへのパケットの配布が行われます。これらの仮想キューは DPDK リング キュー経由で実装されます。送信パスでは、SWRSS は FLT スレッドの仮想送信キューからパケットをフェッチし、送信のためにこれらのパケットを NIC 送信キューにプッシュします。
SWRSS I/Oスレッドの数は、vSRXインスタンス内の合計CPUとNICキュー数に基づいて選択されます。HWRSS および SWRSS との混在動作モードはサポートされていません。
ソフトウェア受信側のスケーリング設定について
このトピックでは、SWRSS(Software Receive Side Scaling)のタイプとその設定について詳しく説明します。
SWRSSは、2つの動作モードをサポートしており、必要なデータパスCPUの数に基づいて有効になります。これらのモードは、共有 IO モードと専用 IO モードです。これらのモードは、必要なデータ パス CPU の数に基づいて有効になります。vSRX および vSRX3.0 は、専用 I/O モードのみをサポートしています。
専用の I/O モード フロー プロセスでは、I/O 操作用に専用の I/O スレッドを作成します。vSRX に必要な I/O スレッドの数に基づいて、I/O スレッドは専用の NIC ポートに関連付けられます。その後、キューの受信と送信を行う NIC ポートがラウンド ロビン方式で各 I/O スレッドに結合され、一様な配信が行われ、I/O スレッド ロックが回避されます。各専用 I/O スレッドは、NIC 受信キューからバースト モードでパケットを引き出し、FLT スレッドに配信し、その逆でパケット送信用の TX パスに配信します。
SWRSS は、vCPU の数に基づいて有効になります。NIC が異なる vCPU を持つ vSRX のフロー スレッド(FLT)として十分な数のキューを持っていない場合、ソフトウェア RSS(SWRSS)はフロー処理によって有効になります。
以下のシナリオでは、SWRSS は有効になっていません。
NIC に必要な PFE データ パス CPU に対して十分な数のハードウェア RX または TX キューがある場合。
vSRX(vCPU の数に基づく)および NIC の結果として、最も近いハードウェア RSS(HWRSS)モードで取得した FLT CPU の数が少ない場合。このようなシナリオでは、vSRX が HWRSS モードで有効になり、SWRSS モードよりも FLT CPU が増加し、パケット処理スループットが向上します。
専用 IO スレッドの実行に必要な NIC キューの数が少ない特定のタイプの NIC を持つ vSRX では、SWRSS は推奨されません。このような場合、SWRSS は有効になっていますが、I/O CPU が完全に利用されるまで、余分な CPU が FLT CPU に接続されます。
SWRSS が有効になっていない場合は、コマンドを set security forwarding-options receive-side-scaling software-rss mode enable
使用して SWRSS を有効にします。このコマンドを実行すると、NIC RSS や vCPU の数に関係なく、SWRSS は強制によって有効になります。CLIを使用してSWRSSを有効にしない場合、SWRSSの有効化は、FLT:IO(4:1)のデフォルト比に基づいて自動的に決定されます。
必要な IO スレッドの数を設定するには、コマンドを set security forwarding-options receive-side-scaling software-rss io-thread-number <1-8>
使用します。IO フロー スレッドに割り当てられた vCPU の実際の数を表示するには、コマンドを show security forwarding-options resource-manager
使用します。
SWRSS の有効化は、IO スレッドとワーカー スレッドのアーキテクチャと概念に基づいて、自動的に、または強制によって決定できます。SWRSS を有効にするとパフォーマンスが低下するため、必要な場合にのみ、およびパフォーマンスに影響するボトルネックポイントに達するまで、IO スレッドの数を変更することをお勧めします。