非 RSS 受信処理
RSS ハンドルをサポートしていないミニポート ドライバーは、このトピックの説明に従って処理を受け取ります。
以下の図は、非 RSS 受信処理を示しています。
図では、破線のパスは送受信処理の代替パスを表しています。 システムはスケーリングを制御するため、最適なパフォーマンスを提供する CPU で処理が常に行われるとは限りません。 接続は、同じ CPU 上で、偶然に連続する割り込みにわたって処理されます。
以下のプロセスは、非 RSS 割り込みサイクルごとに繰り返されます。
NIC は DMA を使用して、受信したデータでバッファーを埋め、システムを中断します。
ミニポート ドライバーは、初期化中に共有メモリ内の受信バッファーを割り当てました。
NIC は、この割り込みサイクルでいつでも追加の受信バッファーを満たし続けることができます。 ただし、ミニポート ドライバーが割り込みを有効にするまで、NIC は再び中断されません。
システムが 1 回の割り込みサイクルで処理する受信バッファーは、さまざまなネットワーク接続に関連付けることができます。
NDIS は、システムによって決定された CPU でミニポート ドライバーの MiniportInterrupt 関数 (ISR) を呼び出します。
理想的には、ISR は最もビジー状態の少ない CPU に移動する必要があります。 ただし、一部のシステムでは、使用可能な CPU または NIC に関連付けられている CPU に ISR が割り当てられます。
ISR は割り込みを無効にし、受信したデータを処理するために遅延プロシージャ コール (DPC) をキューに入れるよう NDIS に要求します。
NDIS は、現在の CPU の MiniportInterruptDPC 関数 (DPC) を呼び出します。
DPC は、すべての受信バッファーの受信記述子をビルドし、ドライバー スタック上のデータを示します。 詳細については、「ネットワーク データの受信」を参照してください 。
多くのさまざまな接続に対して多数のバッファーが存在する可能性があり、完了する処理が多くなる可能性があります。 後続の割り込みサイクルに関連付けられている受信データは、他の CPU で処理できます。 特定のネットワーク接続の送信処理は、別の CPU でも実行できます。
DPC は割り込みを有効にします。 この割り込みサイクルが完了し、プロセスが再び開始されます。