具有硬體佇列的 RSS
具有硬體佇列的 RSS 可改善與具有單一硬體接收佇列解決方案之 RSS 相關的系統效能。 支援硬體佇列的 NIC 會將接收的資料指派給多個接收佇列。 接收佇列會與 CPU 相關聯。 NIC 會根據雜湊值和間接資料表,將接收的資料指派給 CPU。
下圖說明具有 NIC 接收佇列的 RSS。
在圖中,虛線箭號代表接收處理的替代路徑。 RSS 無法控制接收初始 ISR 呼叫的 CPU。 驅動程式不需要將資料排入佇列,因此它可以立即在正確的 CPU 上排程初始 DPC。
下列程式會針對每個中斷重複執行:
The NIC:
使用 DMA 填入已接收資料的緩衝區。
迷你埠驅動程式會在初始化期間配置共用記憶體中的接收緩衝區。
計算雜湊值。
將 CPU 的緩衝區排入佇列,並將佇列指派提供給迷你埠驅動程式。
例如,NIC 可以迴圈步驟 1-3 和 DMA 一份收到某些封包之後的 CPU 指派清單。 特定機制會保留給 NIC 設計。
中斷系統。
系統在一個中斷中處理的接收緩衝區會分散在 CPU 之間。
NDIS 會在系統決定的 CPU 上呼叫迷你埠驅動程式的 MiniportInterrupt 函式, (ISR) 。
迷你埠驅動程式會針對具有非空白佇列的每個 CPU,要求 NDIS 將延後程序呼叫排入佇列 (DPC) 。
請注意,驅動程式啟用中斷之前,所有 DPC 都必須完成。 此外,請注意,ISR 可能會在沒有要處理的緩衝區的 CPU 上執行。
NDIS 會針對每個已排入佇列的 DPC 呼叫 MiniportInterruptDPC 函式。 指定 CPU 上的 DPC:
建置其佇列中所有接收緩衝區的接收描述項,並指出驅動程式堆疊上的資料。
如需詳細資訊,請參閱 指出 RSS 接收資料。
如果這是最後一個要完成的 DPC,則啟用中斷。 此中斷已完成,且程式會再次啟動。 驅動程式必須使用不可部分完成的作業來識別要完成的最後一個 DPC。 例如,驅動程式可以使用 NdisInterlockedDecrement 函式來實作不可部分完成的計數器。