Receive Side Scaling の概要

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

Note

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

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

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

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

Diagram that shows the process of the RSS mechanism in determining a CPU.

NIC は、ハッシュ関数を使用して、受信したネットワーク データ内の、定義された領域 (ハッシュ タイプ) のハッシュ値を計算します。 定義された領域を非連続にすることができます。

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

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

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

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

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

Diagram that shows the different levels of hardware support for 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 など) は、データ ブロックの一部を送信し、データのバランスを送信する前に受信確認を待機します。 その後、受信確認によって後続の送信要求がトリガーされます。 その後、受信確認によって後続の送信要求がトリガーされます。 デフォルトでは、送信処理は、受信確認によってトリガーされた場合、同じ CPU で実行されます。 ドライバーは CPU を指定することもできます (たとえば、タイマーを使用する場合)。

  • セキュア ハッシュ

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

  • MSI-X のサポート

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