NDK_FN_FAST_REGISTER 콜백 함수(ndkpi.h)

NdkFastRegister(NDK_FN_FAST_REGISTER) 함수는 기존 메모리 영역에 어댑터 논리 페이지 배열을 빠르게 등록합니다.

구문

NDK_FN_FAST_REGISTER NdkFnFastRegister;

NTSTATUS NdkFnFastRegister(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
  [in]           NDK_MR *pMr,
  [in]           ULONG AdapterPageCount,
                 const NDK_LOGICAL_ADDRESS *AdapterPageArray,
  [in]           ULONG FBO,
  [in]           SIZE_T Length,
  [in]           PVOID BaseVirtualAddress,
  [in]           ULONG Flags
)
{...}

매개 변수

[in] pNdkQp

NDK QP(큐 쌍) 개체(NDK_QP)에 대한 포인터입니다.

[in, optional] RequestContext

이 요청에 대한 NDK_RESULT 구조체의 RequestContext 멤버에서 반환할 컨텍스트 값입니다.

[in] pMr

빠른 등록을 위해 초기화된 MR(NDK 메모리 영역) 개체(NDK_MR)에 대한 포인터입니다.

[in] AdapterPageCount

AdapterPageArray 매개 변수의 페이지 수입니다. AdapterPageArray의 각 페이지 크기는 PAGE_SIZE 바이트입니다.

AdapterPageArray

각 주소가 페이지의 시작 논리 주소인 어댑터 논리 주소(NDK_LOGICAL_ADDRESS)의 배열입니다. 각 주소는 길이가 PAGE_SIZE 정렬된 페이지여야 합니다. 배열의 연속 주소는 논리 주소 공간 측면에서 반드시 연속되지는 않지만 전체 배열은 호스트 시스템의 관점에서 사실상 연속된 메모리 영역을 나타냅니다.

[in] FBO

첫 번째 페이지 내의 첫 번째 바이트 오프셋(FBO)입니다. 등록된 지역은 이 오프셋에서 시작됩니다.

[in] Length

FBO에서 시작하여 등록되는 지역의 길이(바이트)입니다. 길이는 AdapterPageArray 배열에 포함된 페이지의 첫 번째 집합(AdapterPageCount)에서 FBO를 뺀 값으로 표현되는 총 바이트 수보다 작거나 같아야 합니다.

[in] BaseVirtualAddress

메모리 영역의 첫 번째 바이트 위치를 참조하는 소비자가 지정한 가상 주소 값입니다. 이 값은 PAGE_SIZE 및 FBO의 배수여야 합니다. 따라서 허용되는 값에는 FBO 또는 FBO와 n배의 PAGE_SIZE 포함됩니다. 여기서 n은 0보다 크거나 같습니다. 0은 FBO가 0인 경우에만 유효한 값입니다.

[in] Flags

허용되는 작업을 지정하는 플래그의 비트 OR입니다. 지원되는 플래그는 다음과 같습니다.

의미
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
이 요청의 성공적인 완료가 아웃바운드 완료 큐에서 완료 이벤트를 생성하지 않음을 나타냅니다. 그러나 실패한 요청은 완료 큐에서 이벤트를 생성합니다.
NDK_OP_FLAG_READ_FENCE
0x00000002
하드웨어가 이 요청 처리를 시작하기 전에 모든 이전 읽기 요청을 완료해야 했음을 나타냅니다.
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
연결된 피어에 대해 메모리 영역에 대한 읽기 액세스를 사용하도록 설정합니다. 메모리 영역에 액세스하려면 연결된 피어에 유효한 토큰이 있어야 합니다.
NDK_OP_FLAG_ALLOW_LOCAL_WRITE
0x00000010
메모리 영역에 대한 로컬 쓰기 액세스를 허용합니다.
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
연결된 피어에 대한 메모리 영역에 대한 쓰기 액세스를 사용하도록 설정합니다. 메모리 영역에 액세스하려면 연결된 피어에 유효한 토큰이 있어야 합니다.
NDK_OP_FLAG_DEFER
0x00000200
처리를 위해 하드웨어에 대한 요청을 나타내는 것을 연기할 수 있음을 NDK 공급자에게 나타냅니다. 이 플래그에 대한 자세한 내용은 NDKPI 지연 처리 체계를 참조하세요.

참고 이 플래그는 NDKPI 1.2(Windows Server 2012 R2) 이상에서만 지원됩니다.

반환 값

NDK_FN_FAST_REGISTER 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
요청이 성공적으로 게시되었습니다. 작업 요청이 완료되면 완료 항목이 CQ에 큐에 대기됩니다.
STATUS_CONNECTION_INVALID
QP가 연결되지 않았습니다.
STATUS_ACCESS_VIOLATION
메모리 영역은 빠른 등록 초기화 중에 원격 액세스를 위해 초기화되지 않았지만 NDK_OP_FLAG_ALLOW_REMOTE_READ 또는 NDK_OP_FLAG_ALLOW_REMOTE_WRITE 지정한 빠른 등록 작업 요청입니다.
기타 상태 코드
오류가 발생했습니다.

설명

NdkFastRegister 는 빠른 등록을 위해 초기화된 기존 메모리 영역에 어댑터 논리 페이지 배열을 빠르게 등록합니다.

이 호출이 반환되면 원격 액세스를 위한 메모리 영역 토큰을 MR의 NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) 함수와 함께 사용할 수 있습니다.

NdkFastRegister 는 0부터 시작하는 가상 주소를 지원하지 않습니다.

NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED 플래그가 NDK_ADAPTER_INFO 구조체의 AdapterFlags 멤버에 설정되지 않은 경우 NDK 소비자는 RDMA 읽기 요청에 대한 싱크 버퍼로 사용할 수 있는 메모리를 등록할 때 NDK_OP_FLAG_RDMA_READ_SINK 플래그를 전달해야 합니다. 특정 NDK 공급자는 RDMA 읽기 요청에 대해 싱크 버퍼에 대한 특별한 액세스 권한을 사용하도록 설정해야 할 수 있습니다. 이 플래그를 사용하면 이러한 공급자가 등록 요청을 적절하게 지원할 수 있습니다. 버퍼는 여러 용도로 등록될 수 있으므로 이 플래그는 다른 플래그와 함께 사용될 수 있습니다.

NDK 소비자가 NDK_ADAPTER_INFO 구조의 AdapterFlags 멤버에서 NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED 플래그가 설정된 어댑터에서 NDK_OP_FLAG_RDMA_READ_SINK 플래그를 전달하는 경우 공급자는 NDK_OP_FLAG_RDMA_READ_SINK 플래그를 처리할 필요가 없으며 이 플래그가 있으므로 요청에 실패하지 않아야 합니다.

요구 사항

   
지원되는 최소 클라이언트 지원되지 않음, NDIS 6.30 이상에서 지원됨
지원되는 최소 서버 Windows Server 2012
대상 플랫폼 Windows
헤더 ndkpi.h(Ndkpi.h 포함)
IRQL <=DISPATCH_LEVEL

참고 항목

NDKPI 지연 처리 체계

NDKPI 작업 요청 게시 요구 사항

NDK_ADAPTER_INFO

NDK_FN_GET_REMOTE_TOKEN_FROM_MR

NDK_LOGICAL_ADDRESS

NDK_MR

NDK_QP

NDK_RESULT