非 RSS 受信処理

RSS ハンドルをサポートしていないミニポート ドライバーは、このトピックの説明に従って処理を受け取ります。

以下の図は、非 RSS 受信処理を示しています。

Diagram illustrating send and receive processing without RSS.

図では、破線のパスは送受信処理の代替パスを表しています。 システムはスケーリングを制御するため、最適なパフォーマンスを提供する CPU で処理が常に行われるとは限りません。 接続は、同じ CPU 上で、偶然に連続する割り込みにわたって処理されます。

以下のプロセスは、非 RSS 割り込みサイクルごとに繰り返されます。

  1. NIC は DMA を使用して、受信したデータでバッファーを埋め、システムを中断します。

    ミニポート ドライバーは、初期化中に共有メモリ内の受信バッファーを割り当てました。

  2. NIC は、この割り込みサイクルでいつでも追加の受信バッファーを満たし続けることができます。 ただし、ミニポート ドライバーが割り込みを有効にするまで、NIC は再び中断されません。

    システムが 1 回の割り込みサイクルで処理する受信バッファーは、さまざまなネットワーク接続に関連付けることができます。

  3. NDIS は、システムによって決定された CPU でミニポート ドライバーの MiniportInterrupt 関数 (ISR) を呼び出します。

    理想的には、ISR は最もビジー状態の少ない CPU に移動する必要があります。 ただし、一部のシステムでは、使用可能な CPU または NIC に関連付けられている CPU に ISR が割り当てられます。

  4. ISR は割り込みを無効にし、受信したデータを処理するために遅延プロシージャ コール (DPC) をキューに入れるよう NDIS に要求します。

  5. NDIS は、現在の CPU の MiniportInterruptDPC 関数 (DPC) を呼び出します。

  6. DPC は、すべての受信バッファーの受信記述子をビルドし、ドライバー スタック上のデータを示します。 詳細については、「ネットワーク データの受信」を参照してください 。

    多くのさまざまな接続に対して多数のバッファーが存在する可能性があり、完了する処理が多くなる可能性があります。 後続の割り込みサイクルに関連付けられている受信データは、他の CPU で処理できます。 特定のネットワーク接続の送信処理は、別の CPU でも実行できます。

  7. DPC は割り込みを有効にします。 この割り込みサイクルが完了し、プロセスが再び開始されます。