共用方式為


具有訊息訊號中斷的 RSS

迷你埠驅動程式可以支援訊息信號中斷 (MSI) 以改善 RSS 效能。 MSIS 可讓 NIC 要求 CPU 上的中斷,以處理已接收的數據。 如需 MSI NDIS 支援的詳細資訊,請參閱 NDIS MSI-X

下圖說明使用 MSI-X 的 RSS。

圖表,說明在網路堆疊中使用 MSI-X RSS。

在圖中,虛線箭頭表示在不同連線上的處理。 具有 MSI-X 的 RSS 可讓 NIC 中斷連線的正確 CPU。

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

  1. 網路介面卡(NIC):

    1. 使用 DMA 將接收到的數據填入緩衝區。

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

    2. 計算哈希值。

    3. 將緩衝區佇列到 CPU,並將佇列分配提供給小型埠驅動程式。 例如,NIC 可以重複執行步驟 1-3,然後在收到一些封包之後通過 DMA 傳輸 CPU 指派清單。 特定機制會留給 NIC 設計。

    4. 使用 MSI-X,中斷與非空白佇列相關聯的 CPU。

  2. 網路介面卡可以填滿額外的接收緩衝區,並隨時將它們新增至佇列,但只有在迷你埠驅動程式啟用該 CPU 的中斷功能後,才會再次中斷該 CPU。

  3. NDIS 會在目前的CPU上呼叫迷你埠驅動程式的ISR(MiniportInterrupt)。

  4. ISR 會停用目前 CPU 上的中斷,並將目前 CPU 上的 DPC 排入佇列。

    當 DPC 在目前的 CPU 上執行時,中斷仍可能發生在其他 CPU 上。

  5. NDIS 會針對每個佇列的 DPC 呼叫 MiniportInterruptDPC 函式。 每個 DPC:

    1. 針對其佇列中所有接收的緩衝區建置接收描述項,並指出驅動程式堆疊上的數據。 如需詳細資訊,請參閱 RSS 接收資料指示
    2. 為目前的 CPU 啟用中斷。 此中斷已完成,且程式會再次啟動。 請注意,不需要原子操作即可追蹤其他 DPC 的進度。