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)