次の方法で共有


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

高速登録用に初期化された NDK メモリ領域 (MR) オブジェクト (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 を加えた値が 、n が 0 以上であるPAGE_SIZEの 1 倍になります。 ゼロは、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_INFO構造体のAdapterFlags メンバーに NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED フラグが設定されていない場合、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