次の方法で共有


メッセージ信号割り込み対応の RSS

ミニポート ドライバーは、RSS のパフォーマンスを向上させるために、メッセージ通知割り込み (MSI) をサポートできます。 MSI を使用すると、NIC は、受信したデータを処理する CPU の割り込みを要求できます。 MSI の NDIS サポートの詳細については、「 NDIS MSI-X」を参照してください。

次の図は、MSI-X を使用した RSS を示しています。

ネットワーク スタック内の MSI-X を含む RSS を示す図。

図では、破線の矢印は別の接続での処理を表しています。 MSI-X を含む RSS を使用すると、NIC は接続に対して正しい CPU を中断できます。

割り込みごとに次のプロセスが繰り返されます。

  1. The NIC:

    1. DMA を使用して、受信したデータをバッファーに入力します。

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

    2. ハッシュ値を計算します。

    3. バッファーを CPU にキューに入れ、ミニポート ドライバーにキューの割り当てを提供します。 たとえば、NIC は手順 1 から 3 をループし、いくつかのパケットを受信した後に CPU 割り当ての一覧を DMA でループできます。 具体的なメカニズムは、NIC の設計に任されています。

    4. MSI-X を使用すると、空でないキューに関連付けられている CPU が中断されます。

  2. NIC は、追加の受信バッファーを入力し、いつでもキューに追加できますが、ミニポート ドライバーがその CPU の割り込みを有効にするまで、その CPU を再度中断しません。

  3. NDIS は、現在の CPU でミニポート ドライバーの ISR ( ミニポートInterrupt) を呼び出します。

  4. ISR は現在の CPU の割り込みを無効にし、現在の CPU 上の DPC をキューに入れます。

    DPC が現在の CPU で実行されている間も、割り込みは他の CPU で引き続き発生する可能性があります。

  5. NDIS は、キューされた各 DPC に対して MiniportInterruptDPC 関数を呼び出します。 各 DPC:

    1. ビルドは、キュー内のすべての受信バッファーの記述子を受け取り、ドライバー スタック上のデータを示します。 詳細については、「 RSS 受信データを示す」を参照してください。
    2. 現在の CPU の割り込みを有効にします。 この割り込みが完了し、プロセスが再び開始されます。 他の DPC の進行状況を追跡するためにアトミック操作は必要ありません。