共用方式為


具有單一硬體接收佇列的 RSS

迷你埠驅動程式可以針對支援 RSS 雜湊計算和單一接收描述元佇列的 NIC 支援 RSS。

下圖說明使用單一接收描述元佇列的 RSS 處理。

說明使用單一接收描述元佇列處理 RSS 的圖表。

在圖中,虛線箭號代表接收處理的替代路徑。 RSS 無法控制接收初始 ISR 呼叫的 CPU。

不同于非 RSS 接收處理,RSS 型接收處理會分散到多個 CPU 上。 此外,指定連線的處理也可以系結至指定的 CPU。

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

  1. NIC 會使用 DMA 來填滿接收的資料緩衝區,並中斷系統。

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

  2. NIC 可以隨時填滿其他接收緩衝區,但除非迷你埠驅動程式啟用中斷,否則不會再次中斷。

    系統在一個中斷中處理的接收緩衝區可以與許多不同的網路連線相關聯。

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

  4. ISR 會停用中斷,並要求 NDIS 將延遲程序呼叫排入佇列, (DPC) 來處理收到的資料。

  5. NDIS 會在目前的 CPU 上呼叫 MiniportInterruptDPC 函式 (DPC) 。 在 DPC 中:

    1. 迷你埠驅動程式會使用 NIC 針對每個接收的緩衝區計算的雜湊值,並將每個接收的緩衝區重新指派給與 CPU 相關聯的接收佇列。
    2. 目前的 DPC 會要求 NDIS 針對與非空白接收佇列相關聯的其他 CPU 將 DPC 排入佇列。
    3. 如果目前的 DPC 是在與非空白佇列相關聯的 CPU 上執行,則目前的 DPC 會處理相關聯的接收緩衝區,並指出驅動程式堆疊上收到的資料。

    指派佇列和佇列額外的 DPC 需要額外的處理額外負荷。 若要達到改善的系統效能,此額外負荷必須藉由較佳的可用 CPU 使用率來位移。

  6. 指定 CPU 上的 DPC:

    1. 處理與其接收佇列相關聯的接收緩衝區,並指出驅動程式堆疊上的資料。 如需詳細資訊,請參閱 指出 RSS 接收資料
    2. 如果這是最後一個要完成的 DPC,則啟用中斷。 此中斷已完成,且程式會再次啟動。 驅動程式必須使用不可部分完成的作業來識別要完成的最後一個 DPC。 例如,驅動程式可以使用 NdisInterlockedDecrement 函式來實作不可部分完成的計數器。