迷你埠驅動程式可以支援具備 RSS 雜湊計算功能和單一接收描述元佇列的 NIC。
下圖說明使用單一接收描述元佇列的 RSS 處理。
在此圖中,虛線箭頭代表接收處理的另一條路徑。 RSS 無法控制接收初始 ISR 呼叫的 CPU。
與非 RSS 接收處理不同,RSS 型接收處理會分散到多個 CPU。 此外,指定連線的處理可以系結至指定的CPU。
下列程式會針對每個中斷重複執行:
NIC 會使用 DMA 來填滿接收的數據緩衝區,並中斷系統。
迷你埠驅動程式在初始化期間在共用記憶體中配置接收緩衝區。
NIC 可以隨時填滿其他接收緩衝區,但在迷你埠驅動程式啟用中斷之前不會再次中斷。
系統在一個中斷中處理的接收緩衝區可以與許多不同的網路連線相關聯。
NDIS 會在系統指定的 CPU 上呼叫小型端口驅動程式的 MiniportInterrupt 函式 (ISR)。
ISR 會停用中斷,並要求 NDIS 將延遲程序呼叫(DPC)排入佇列,以處理接收到的數據。
NDIS 會在目前的CPU上呼叫 MiniportInterruptDPC 函式 (DPC)。 在 DPC 中:
- 迷你埠驅動程式會使用 NIC 針對每個接收的緩衝區計算的哈希值,並將每個接收的緩衝區重新指派給與 CPU 相關聯的接收佇列。
- 目前的 DPC 要求 NDIS 針對與非空白接收佇列相關聯的其他每個 CPU 將 DPC 排入佇列。
- 如果目前的 DPC 是在與非空白佇列相關聯的 CPU 上執行,則目前的 DPC 會處理相關聯的接收緩衝區,並上報驅動程式堆疊上收到的資料。
指派佇列,並佇列額外的 DPC 需要額外的處理額外負荷。 若要達到改善的系統效能,此額外負荷必須因可用CPU的使用率提高而抵消。
指定 CPU 上的 DPC:
- 處理與接收佇列相關的緩衝區,並向驅動程式堆疊之上層傳遞數據。 如需詳細資訊,請參閱 說明 RSS 接收資料。
- 當該 DPC 是最後完成的時候,啟用中斷。 此中斷已完成,且程式會再次啟動。 驅動程式必須使用原子操作來識別最後完成的 DPC。 例如,驅動程式可以使用 NdisInterlockedDecrement 函式來實作原子計數器。