迷你埠驅動程式可以支援訊息信號中斷 (MSI) 以改善 RSS 效能。 MSIS 可讓 NIC 要求 CPU 上的中斷,以處理已接收的數據。 如需 MSI NDIS 支援的詳細資訊,請參閱 NDIS MSI-X。
下圖說明使用 MSI-X 的 RSS。
在圖中,虛線箭頭表示在不同連線上的處理。 具有 MSI-X 的 RSS 可讓 NIC 中斷連線的正確 CPU。
下列程式會針對每個中斷重複執行:
網路介面卡(NIC):
使用 DMA 將接收到的數據填入緩衝區。
迷你埠驅動程式在初始化期間在共用記憶體中配置接收緩衝區。
計算哈希值。
將緩衝區佇列到 CPU,並將佇列分配提供給小型埠驅動程式。 例如,NIC 可以重複執行步驟 1-3,然後在收到一些封包之後通過 DMA 傳輸 CPU 指派清單。 特定機制會留給 NIC 設計。
使用 MSI-X,中斷與非空白佇列相關聯的 CPU。
網路介面卡可以填滿額外的接收緩衝區,並隨時將它們新增至佇列,但只有在迷你埠驅動程式啟用該 CPU 的中斷功能後,才會再次中斷該 CPU。
NDIS 會在目前的CPU上呼叫迷你埠驅動程式的ISR(MiniportInterrupt)。
ISR 會停用目前 CPU 上的中斷,並將目前 CPU 上的 DPC 排入佇列。
當 DPC 在目前的 CPU 上執行時,中斷仍可能發生在其他 CPU 上。
NDIS 會針對每個佇列的 DPC 呼叫 MiniportInterruptDPC 函式。 每個 DPC:
- 針對其佇列中所有接收的緩衝區建置接收描述項,並指出驅動程式堆疊上的數據。 如需詳細資訊,請參閱 RSS 接收資料指示。
- 為目前的 CPU 啟用中斷。 此中斷已完成,且程式會再次啟動。 請注意,不需要原子操作即可追蹤其他 DPC 的進度。