共用方式為


NDKPI 延遲處理配置

在許多情況下,NDK 取用者會將啟動器要求鏈結張貼至佇列配對, (QP) 。 例如,取用者可以張貼一些快速註冊要求,後面接著傳送要求。 如果要求鏈結排入 QP 佇列,然後指示硬體以批次方式處理,而不是逐一指出鏈結中的每個要求,則可能會改善這類要求模式的效能。

NDK_OP_FLAG_DEFER旗標值可用於此用途,並搭配下列要求類型:

旗標的存在是 NDK 提供者的提示,指出它可能會延遲對硬體的要求進行處理,但提供者可以隨時處理新的要求。

啟動器要求上存在 NDK_OP_FLAG_DEFER 旗標並不會變更 NDK 提供者對於產生完成的現有責任。 呼叫傳回失敗狀態的啟動器要求,不會導致完成排入佇列給失敗要求的 CQ。 相反地,傳回成功狀態的呼叫最終必須將完成排入 CQ 佇列,只要取用者遵循下面所列的其他需求。

除了所有現有的 NDK 需求之外,必須觀察提供者的兩個額外需求 (一個,另一個用於取用者) ,以防止要求成功張貼到具有 NDK_OP_FLAG_DEFER 旗標的 QP,但永遠不會向硬體指出進行處理:

  • 從呼叫啟動器要求傳回失敗狀態時,提供者必須保證先前以 NDK_OP_FLAG_DEFER 旗標提交的所有要求都會向硬體指出進行處理。
  • 取用者保證,如果沒有內嵌失敗,所有啟動器要求鏈結都會由未設定 NDK_OP_FLAG_DEFER 旗標的啟動器要求終止。

例如,假設取用者有兩個快速註冊要求的鏈結,以及需要張貼至 QP 的傳送:

  1. 取用者會以 NDK_OP_FLAG_DEFER 旗標張貼第一個快速暫存器,而 NdkFastRegister 會傳回STATUS_SUCCESS。
  2. 同樣地,第二個快速暫存器會張貼 NDK_OP_FLAG_DEFER旗標 集,但現在 NdkFastRegister 會傳回失敗狀態。 在此情況下,取用者不會張貼傳送要求。
  3. 傳回第二次呼叫 NdkFastRegister的內嵌失敗時,NDK 提供者會確定所有先前未完成的要求都 (第一個快速暫存器,在此情況下,) 會指示硬體進行處理。
  4. 因為第一次呼叫 NdkFastRegister 成功,所以必須對 CQ 產生完成。
  5. 因為 對 NdkFastRegister 的第二次呼叫內嵌失敗,所以不能對 CQ 產生完成。

(NDKPI) 網路直接核心提供者介面