次の方法で共有


SAN プロキシ ドライバーのメモリの割り当てと解放

プロキシ ドライバーは、Windows ソケット スイッチが制御メッセージを転送し、RDMA 操作を実行できるように、ユーザー バッファーへのアクセスを設定する必要があります。 この種類のバッファー アクセスを要求するために、プロキシ ドライバーはデバイス オブジェクトの Flags メンバーのビットを DO_DIRECT_IO に設定します。 プロキシ ドライバーは、要求されるたびにメッセージ転送と RDMA に使用されるメモリーを割り当てるか解放する必要もあります。 Windows ソケット スイッチが SAN サービス プロバイダーにメモリーの登録または解放を要求すると、SAN サービス プロバイダーは、それぞれ物理メモリーを割り当てるか解放するようにプロキシ ドライバーを要求します。 バッファー アクセスの設定とメモリーの割り当てと解放の詳細については、「メモリー管理」と「バッファー管理」を参照してください。

RDMA に低メモリーを割り当てる

プロキシ ドライバーは、RDMA 操作にアクセスできるメモリーを割り当てる必要があります。 プロキシ ドライバーは、4 GB 未満の物理メモリーを割り当てないように構成されているシステムでも、RDMA 操作に低メモリーを割り当てることができます。 (これは NOLOWMEM 構成と呼ばれます)。プロキシ ドライバーは、低メモリーを取得するために、MmAllocateContiguousMemorySpecifyCache 関数または独自の DMA AllocateCommonBuffer 関数を呼び出します。

DMA AllocateCommonBuffer 関数へのポインターを取得するには、プロキシ ドライバーは次の手順を実行します。

  1. DEVICE_DESCRIPTION 構造をゼロ初期化し、その SAN NIC の関連情報をこの構造に書き込みます。

  2. IoGetDmaAdapter を呼び出して、その SAN NIC の DMA アダプター構造へのポインターを取得します。 この呼び出しでは、ドライバーは、埋め込まれた DEVICE_DESCRIPTION 構造へのポインターを渡します。 IoGetDmaAdapter は、 DMA_OPERATIONS 構造体へのポインターを含む DMA アダプター構造体へのポインターを返します。 DMA_OPERATIONS には、システム定義の DMA 関数のセットへのポインターが含まれています。 これらの関数の 1 つは AllocateCommonBuffer で、物理的に連続する DMA バッファーを割り当てます。