Receive Side Scaling の概要Introduction to Receive Side Scaling

Receive side scaling (RSS) は、マルチプロセッサシステムの複数の Cpu にわたってネットワークの受信処理を効率的に分散できるようにするネットワークドライバーテクノロジです。Receive side scaling (RSS) is a network driver technology that enables the efficient distribution of network receive processing across multiple CPUs in multiprocessor systems.

注意

同じコアプロセッサ上のハイパースレッド Cpu は同じ実行エンジンを共有するため、効果は複数のコアプロセッサを持つ場合と同じではありません。Because hyper-threaded CPUs on the same core processor share the same execution engine, the effect is not the same as having multiple core processors. このため、RSS はハイパースレッドプロセッサを使用しません。For this reason, RSS does not use hyper-threaded processors.

受信したデータを効率的に処理するために、ミニポートドライバーの受信割り込みサービス関数は遅延プロシージャ呼び出し (DPC) をスケジュールします。To process received data efficiently, a miniport driver's receive interrupt service function schedules a deferred procedure call (DPC). RSS を使用しない場合、一般的な DPC は DPC 呼び出し内で受信したすべてのデータを示します。Without RSS, a typical DPC indicates all received data within the DPC call. そのため、割り込みに関連付けられているすべての受信処理は、受信割り込みが発生した CPU 上で実行されます。Therefore, all of the receive processing that is associated with the interrupt runs on the CPU where the receive interrupt occurs. RSS 以外の受信処理の概要については、「 Rss 以外の受信処理」を参照してください。For an overview of non-RSS receive processing, see Non-RSS Receive Processing.

RSS では、NIC とミニポートドライバーによって、他のプロセッサでの Dpc の受信をスケジュールする機能が提供されます。With RSS, the NIC and miniport driver provide the ability to schedule receive DPCs on other processors. また、RSS の設計により、特定の接続に関連付けられている処理が、割り当てられた CPU に保持されるようになります。Also, the RSS design ensures that the processing that is associated with a given connection stays on an assigned CPU. NIC はハッシュ関数を実装し、結果のハッシュ値は CPU を選択するための手段を提供します。The NIC implements a hash function and the resulting hash value provides the means to select a CPU.

次の図は、CPU を特定するための RSS メカニズムを示しています。The following figure illustrates the RSS mechanism for determining a CPU.

cpu を特定するための rss メカニズムを示す図

NIC は、ハッシュ関数を使用して、受信したネットワークデータ内の定義された領域 (ハッシュの種類) に対してハッシュ値を計算します。A NIC uses a hashing function to compute a hash value over a defined area (hash type) within the received network data. 定義された領域は不連続にすることができます。The defined area can be noncontiguous.

間接テーブルのインデックスを作成するには、ハッシュ値の最下位ビット (LSBs) が使用されます。A number of least significant bits (LSBs) of the hash value are used to index an indirection table. 間接テーブルの値は、受信したデータを CPU に割り当てるために使用されます。The values in the indirection table are used to assign the received data to a CPU.

間接テーブル、ハッシュの種類、およびハッシュ関数の指定の詳細については、「 RSS の構成」を参照してください。For more detailed information about specifying indirection tables, hash types, and hashing functions, see RSS Configuration.

メッセージシグナル割り込み (MSI) のサポートにより、NIC は関連付けられている CPU を中断することもできます。With message signaled interrupt (MSI) support, a NIC can also interrupt the associated CPU. Msi の NDIS サポートの詳細については、「 NDIS MSI-X」を参照してください。For more information about NDIS support for MSIs, see NDIS MSI-X.

RSS のハードウェアサポートHardware support for RSS

次の図は、RSS のハードウェアサポートのレベルを示しています。The following figure illustrates the levels of hardware support for RSS.

rss のハードウェアサポートのレベルを示す図

RSS のハードウェアサポートには、次の3つのレベルがあります。There are three possible levels of hardware support for RSS:

1つのキューを使用したハッシュ計算Hash calculation with a single queue
NIC はハッシュ値を計算し、ミニポートドライバーは、Cpu に関連付けられているキューに受信パケットを割り当てます。The NIC calculates the hash value and the miniport driver assigns received packets to queues that are associated with CPUs. 詳細については、「 単一のハードウェア受信キューを使用した RSS」を参照してください。For more information, see RSS with a Single Hardware Receive Queue.

複数の受信キューを使用したハッシュ計算Hash calculation with multiple receive queues
NIC は、受信したデータバッファーを Cpu に関連付けられているキューに割り当てます。The NIC assigns the received data buffers to queues that are associated with CPUs. 詳細については、「 ハードウェアキューを使用した RSS」を参照してください。For more information, see RSS with Hardware Queuing.

メッセージシグナル割り込み (Msi)Message Signaled Interrupts (MSIs)
NIC は、受信したパケットを処理する必要がある CPU を中断します。The NIC interrupts the CPU that should handle the received packets. 詳細については、「 RSS によるメッセージシグナル割り込み」を参照してください。For more information, see RSS with Message Signaled Interrupts.

NIC は常に32ビットのハッシュ値を渡します。The NIC always passes on the 32-bit hash value.

RSS がシステムパフォーマンスを向上させる方法How RSS improves system performance

RSS は、次のようにしてネットワークシステムのパフォーマンスを向上させることができます。RSS can improve network system performance by reducing:

  • 複数の Cpu にわたって NIC から受信処理を分散することによる処理の遅延。Processing delays by distributing receive processing from a NIC across multiple CPUs.

    これにより、別の CPU がアイドル状態のときに CPU が大量に読み込まれないようにすることができます。This helps to ensure that no CPU is heavily loaded while another CPU is idle.

  • データを共有するソフトウェアアルゴリズムが同じ CPU で実行される確率を高めることによって、ロックのオーバーヘッドをスピンします。Spin lock overhead by increasing the probability that software algorithms that share data execute on the same CPU.

    スピンロックのオーバーヘッドが発生します。たとえば、CPU0 上で実行されている関数が、CPU1 上で実行されている関数がアクセスする必要があるデータに対してスピンロックを所有している場合です。Spin lock overhead occurs, for example, when a function executing on CPU0 possesses a spin lock on data that a function running on CPU1 must access. CPU1 は、CPU0 がロックを解放するまで待機します。CPU1 spins (waits) until CPU0 releases the lock.

  • データを共有するソフトウェアアルゴリズムが同じ CPU で実行される可能性を高くすることで、キャッシュやその他のリソースを再読み込みします。Reloading of caches and other resources by increasing the probability that software algorithms that share data execute on the same CPU.

    このような再読み込みが発生するのは、たとえば、CPU0 上の共有データにアクセスしている関数を実行している関数が、その後の割り込みで CPU1 上で実行される場合です。Such reloading occurs, for example, when a function that is executing and accessing shared data on CPU0, executes on CPU1 in a subsequent interrupt.

セキュリティで保護された環境でこれらのパフォーマンスの向上を実現するために、RSS には次のメカニズムが用意されています。To achieve these performance improvements in a secure environment, RSS provides the following mechanisms:

  • 分散処理Distributed processing

    RSS は、Dpc 内の特定の NIC から複数の Cpu に受信通知の処理を分散します。RSS distributes the processing of receive indications from a given NIC in DPCs to multiple CPUs.

  • 注文処理In-order processing

    RSS は、受信したデータパケットの配信順序を保持します。RSS preserves the order of delivery of received data packets. RSS プロセスは、各ネットワーク接続について、関連付けられている CPU で通知を受け取ります。For each network connection, RSS processes receive indications on an associated CPU. RSS 受信処理の詳細については、「 Rss 受信データを示す」を参照してください。For more information about RSS receive processing, see Indicating RSS Receive Data.

  • 動的負荷分散Dynamic load balancing

    RSS は、ホストシステムの負荷が変化するときに、Cpu 間でネットワーク処理負荷を再調整する手段を提供します。RSS provides a means to rebalance the network processing load between CPUs as host system load varies. 負荷を再調整するために、前のドライバーは間接テーブルを変更できます。To rebalance the load, overlying drivers can change the indirection table. 間接テーブル、ハッシュの種類、およびハッシュ関数の指定の詳細については、「 RSS の構成」を参照してください。For more information about specifying indirection tables, hash types, and hashing functions, see RSS Configuration.

  • 送信側のスケーリングSend-side scaling

    RSS を使用すると、ドライバースタックは、同じ CPU 上の特定の接続の送信データと受信側データを処理できます。RSS enables driver stacks to process send and receive-side data for a given connection on the same CPU. 通常、1つ前のドライバー (TCP など) はデータブロックの一部を送信し、データのバランスを送信する前に受信確認を待機します。Typically, an overlying driver (for example, TCP) sends part of a data block and waits for an acknowledgment before sending the balance of the data. その後、受信確認によって後続の送信要求がトリガーされます。The acknowledgment then triggers subsequent send requests. RSS 間接テーブルは、受信データ処理の特定の CPU を識別します。The RSS indirection table identifies a particular CPU for the receive data processing. 既定では、受信確認によってトリガーされた場合、送信処理は同じ CPU で実行されます。By default, the send processing runs on the same CPU if it is triggered by the receive acknowledgment. ドライバーは CPU を指定することもできます (たとえば、タイマーが使用されている場合)。A driver can also specify the CPU (for example, if a timer is used).

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

    RSS には、追加のセキュリティを提供する署名が含まれています。RSS includes a signature that provides added security. この署名は、システムを不安定な状態にする可能性がある悪意のあるリモートホストからシステムを保護します。This signature protects the system from malicious remote hosts that might attempt to force the system into an unbalanced state.

  • MSI-X のサポートMSI-X support

    MSI-X をサポートする RSS は、後で DPC を実行するのと同じ CPU で interrupt service ルーチン (ISR) を実行します。RSS, with support for MSI-X, runs the interrupt service routine (ISR) on the same CPU that later executes the DPC. これにより、スピンロックのオーバーヘッドとキャッシュの再読み込みが軽減されます。This reduces spin lock overhead and reloading of caches.