Share via


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(네트워크 직접 커널 공급자 인터페이스)