共用方式為


具有硬體佇列的 RSS

具有硬體佇列的 RSS 可改善與具有單一硬體接收佇列解決方案之 RSS 相關的系統效能。 支援硬體佇列的 NIC 會將接收的資料指派給多個接收佇列。 接收佇列會與 CPU 相關聯。 NIC 會根據雜湊值和間接資料表,將接收的資料指派給 CPU。

下圖說明具有 NIC 接收佇列的 RSS。

說明 RSS 與 NIC 接收佇列的圖表。

在圖中,虛線箭號代表接收處理的替代路徑。 RSS 無法控制接收初始 ISR 呼叫的 CPU。 驅動程式不需要將資料排入佇列,因此它可以立即在正確的 CPU 上排程初始 DPC。

下列程式會針對每個中斷重複執行:

  1. The NIC:

    1. 使用 DMA 填入已接收資料的緩衝區。

      迷你埠驅動程式會在初始化期間配置共用記憶體中的接收緩衝區。

    2. 計算雜湊值。

    3. 將 CPU 的緩衝區排入佇列,並將佇列指派提供給迷你埠驅動程式。

      例如,NIC 可以迴圈步驟 1-3 和 DMA 一份收到某些封包之後的 CPU 指派清單。 特定機制會保留給 NIC 設計。

    4. 中斷系統。

      系統在一個中斷中處理的接收緩衝區會分散在 CPU 之間。

  2. NDIS 會在系統決定的 CPU 上呼叫迷你埠驅動程式的 MiniportInterrupt 函式, (ISR) 。

  3. 迷你埠驅動程式會針對具有非空白佇列的每個 CPU,要求 NDIS 將延後程序呼叫排入佇列 (DPC) 。

    請注意,驅動程式啟用中斷之前,所有 DPC 都必須完成。 此外,請注意,ISR 可能會在沒有要處理的緩衝區的 CPU 上執行。

  4. NDIS 會針對每個已排入佇列的 DPC 呼叫 MiniportInterruptDPC 函式。 指定 CPU 上的 DPC:

    1. 建置其佇列中所有接收緩衝區的接收描述項,並指出驅動程式堆疊上的資料。

      如需詳細資訊,請參閱 指出 RSS 接收資料

    2. 如果這是最後一個要完成的 DPC,則啟用中斷。 此中斷已完成,且程式會再次啟動。 驅動程式必須使用不可部分完成的作業來識別要完成的最後一個 DPC。 例如,驅動程式可以使用 NdisInterlockedDecrement 函式來實作不可部分完成的計數器。