ミニポート ドライバーは、RSS のパフォーマンスを向上させるために、メッセージ通知割り込み (MSI) をサポートできます。 MSI を使用すると、NIC は、受信したデータを処理する CPU の割り込みを要求できます。 MSI の NDIS サポートの詳細については、「 NDIS MSI-X」を参照してください。
次の図は、MSI-X を使用した RSS を示しています。
図では、破線の矢印は別の接続での処理を表しています。 MSI-X を含む RSS を使用すると、NIC は接続に対して正しい CPU を中断できます。
割り込みごとに次のプロセスが繰り返されます。
The NIC:
DMA を使用して、受信したデータをバッファーに入力します。
ミニポート ドライバーは、初期化中に共有メモリ内の受信バッファーを割り当てた。
ハッシュ値を計算します。
バッファーを CPU にキューに入れ、ミニポート ドライバーにキューの割り当てを提供します。 たとえば、NIC は手順 1 から 3 をループし、いくつかのパケットを受信した後に CPU 割り当ての一覧を DMA でループできます。 具体的なメカニズムは、NIC の設計に任されています。
MSI-X を使用すると、空でないキューに関連付けられている CPU が中断されます。
NIC は、追加の受信バッファーを入力し、いつでもキューに追加できますが、ミニポート ドライバーがその CPU の割り込みを有効にするまで、その CPU を再度中断しません。
NDIS は、現在の CPU でミニポート ドライバーの ISR ( ミニポートInterrupt) を呼び出します。
ISR は現在の CPU の割り込みを無効にし、現在の CPU 上の DPC をキューに入れます。
DPC が現在の CPU で実行されている間も、割り込みは他の CPU で引き続き発生する可能性があります。
NDIS は、キューされた各 DPC に対して MiniportInterruptDPC 関数を呼び出します。 各 DPC:
- ビルドは、キュー内のすべての受信バッファーの記述子を受け取り、ドライバー スタック上のデータを示します。 詳細については、「 RSS 受信データを示す」を参照してください。
- 現在の CPU の割り込みを有効にします。 この割り込みが完了し、プロセスが再び開始されます。 他の DPC の進行状況を追跡するためにアトミック操作は必要ありません。