Receive Side Scaling の概要

Receive Side Scaling (RSS) は、マルチプロセッサ システム内の複数の CPU 間でネットワーク受信処理を効率的に分散できるようにするネットワーク ドライバー テクノロジです。

注意

同じコア プロセッサ上のハイパースレッド CPU は同じ実行エンジンを共有するため、複数のコア プロセッサがある場合と同じ効果はありません。 このため、RSS ではハイパースレッド プロセッサは使用されません。

受信したデータを効率的に処理するために、ミニポート ドライバーの受信割り込みサービス関数は、遅延プロシージャ呼び出し (DPC) をスケジュールします。 RSS がない場合、一般的な DPC は、DPC 呼び出し内で受信したすべてのデータを示します。 そのため、割り込みに関連付けられているすべての受信処理は、受信割り込みが発生した CPU で実行されます。 RSS 以外の受信処理の概要については、「 RSS 以外の受信処理」を参照してください。

RSS を使用すると、NIC ドライバーとミニポート ドライバーは、他のプロセッサで DPC の受信をスケジュールできます。 RSS デザインにより、特定の接続に関連付けられている処理が割り当てられた CPU に維持されます。 NIC はハッシュ関数を実装し、結果のハッシュ値は CPU を選択するのに役立ちます。

次の図は、CPU を決定するための RSS メカニズムを示しています。

CPU を決定する際の RSS メカニズムのプロセスを示す図。

NIC はハッシュ関数を使用して、受信したネットワーク データ内の定義された領域 (ハッシュの種類) に対してハッシュ値を計算します。 定義された領域は、連続しない場合があります。

間接参照テーブルのインデックスを作成するには、ハッシュ値の下位ビット (LSB) が使用されます。 間接参照テーブルの値は、受信したデータを CPU に割り当てるために使用されます。

間接参照テーブル、ハッシュ型、ハッシュ関数の指定の詳細については、「 RSS 構成」を参照してください。

メッセージシグナル割り込み (MSI) のサポートを使用すると、NIC は関連付けられている CPU を中断することもできます。 MSI の NDIS サポートの詳細については、「 NDIS MSI-X」を参照してください。

RSS のハードウェア サポート

次の図は、RSS のハードウェア サポートのレベルを示しています。

RSS のさまざまなレベルのハードウェア サポートを示す図。

RSS のハードウェア サポートには、次の 3 つのレベルが考えられます。

NIC は常に 32 ビット ハッシュ値を渡します。

RSS によってシステムのパフォーマンスが向上する方法

RSS では、次のことが削減され、ネットワーク システムのパフォーマンスが向上します。

  • NIC からの受信処理を複数の CPU に分散することで遅延を処理する。

    受信処理を分散すると、別の CPU がアイドル状態のときに CPU が大量に読み込まれないようにするのに役立ちます。

  • データを共有するソフトウェア アルゴリズムが同じ CPU で実行される確率を高めることで、スピン ロックのオーバーヘッドが発生します。

    スピン ロックのオーバーヘッドは、たとえば、CPU0 で実行される関数が、CPU1 で実行されている関数がアクセスする必要があるデータにスピン ロックを持っている場合に発生します。 CPU1 は、CPU0 がロックを解放するまでスピン (待機) します。

  • データを共有するソフトウェア アルゴリズムが同じ CPU で実行される確率を高めることにより、キャッシュやその他のリソースを再読み込みする。

    このような再読み込みは、たとえば、CPU0 で共有データを実行してアクセスしている関数が、後続の割り込みで CPU1 で実行されるときに発生します。

セキュリティで保護された環境でこれらのパフォーマンスを向上させるために、RSS には次のメカニズムが用意されています。

  • 分散処理

    RSS は、DPC 内の特定の NIC からの受信指示の処理を複数の CPU に配布します。

  • インオーダー処理

    RSS は、受信したデータ パケットの配信順序を保持します。 各ネットワーク接続について、RSS プロセスは関連付けられている CPU に関する指示を受け取ります。 RSS 受信処理の詳細については、「 RSS 受信データを示す」を参照してください。

  • 動的負荷分散

    RSS は、ホスト システムの負荷が変化する際に CPU 間のネットワーク処理負荷を再調整する手段を提供します。 負荷を再調整するために、上にあるドライバーは間接参照テーブルを変更できます。 間接参照テーブル、ハッシュ型、ハッシュ関数の指定の詳細については、「 RSS 構成」を参照してください。

  • 送信側のスケーリング

    RSS を使用すると、ドライバー スタックは、同じ CPU 上の特定の接続の送信と受信側のデータを処理できます。 通常、上にあるドライバー (TCP など) はデータ ブロックの一部を送信し、データのバランスを送信する前に受信確認を待機します。 その後、受信確認によって後続の送信要求がトリガーされます。 RSS 間接参照テーブルは、受信データ処理の特定の CPU を識別します。 既定では、受信確認によって送信処理がトリガーされた場合、送信処理は同じ CPU で実行されます。 ドライバーは CPU を指定することもできます (タイマーを使用する場合など)。

  • セキュリティで保護されたハッシュ

    RSS には、セキュリティを強化する署名が含まれています。 この署名は、システムを不均衡な状態に強制しようとする悪意のあるリモート ホストからシステムを保護します。

  • MSI-X のサポート

    MSI-X をサポートする RSS は、後で DPC を実行するのと同じ CPU で割り込みサービス ルーチン (ISR) を実行します。 これにより、スピン ロックのオーバーヘッドとキャッシュの再読み込みが削減されます。