次の方法で共有


SAN の操作用のメモリの登録

Windows ソケット スイッチは、SAN サービス プロバイダーの拡張機能を呼び出して、メッセージの送受信およびシステム エリア ネットワークでの RDMA 操作のすべてのデータ バッファーを登録します。 これらの拡張関数は、リモート ピアに接続されている特定の SAN ソケットで使用するため、物理メモリの領域にバッファーを登録します。 これらの拡張機能について詳しくは、「SAN の Windows ソケット SPI 拡張機能」をご覧ください。

データ バッファーの登録

スイッチは、ローカル プロセスで実行されるアプリケーションの代わりに SAN サービス プロバイダーの WSPRegisterMemory 拡張機能関数を呼び出して、そのプロセスによってのみアクセスできるデータ バッファーを登録します。 WSPRegisterMemory から返されるバッファー ハンドルは、登録を実行したローカル プロセスのコンテキストでのみ有効です。 スイッチは WSPRegisterMemory を呼び出して、WSPRecv 関数の呼び出しまたは WSPSend 関数の呼び出しでバッファーを送信するメッセージの受信バッファーとして機能するバッファーを登録します。 さらに、このスイッチは WSPRegisterMemory を呼び出して、WSPRdmaRead 拡張関数の呼び出しまたは WSPRdmaWrite 拡張関数の呼び出しでローカル受信 RDMA バッファーとして機能するバッファーを登録します。 WSPRegisterMemory に登録されたバッファーの使用がローカル プロセスで完了すると、スイッチは WSPDeregisterMemory 拡張関数を呼び出してそれらのバッファーを解放します。

スイッチは、ローカル プロセスで実行されるアプリケーションに代わって SAN サービス プロバイダーの WSPRegisterRdmaMemory 拡張機能関数を呼び出し、ローカル プロセスとリモート プロセスの両方がアクセスできる RDMA バッファーを登録します。 WSPRegisterRdmaMemory によって返されるバッファー記述子は、登録が実行された SAN ソケットへのピアの接続のコンテキストでリモート ピアが開始する RDMA データ転送操作に対してのみ有効です。 リモート ピア接続のスイッチは、これらの RDMA バッファーを、WSPRdmaWrite 拡張関数の呼び出しのターゲットまたは WSPRdmaRead 拡張関数の呼び出しのソースとして使用します。 WSPRegisterRdmaMemory に登録されたバッファーを使用してローカルプロセスとリモート プロセスが終了すると、スイッチは WSPDeregisterRdmaMemory 拡張関数を呼び出してそれらのバッファーを解放します。

メモリ アクセスの管理

SAN サービス プロバイダーは、登録済みメモリへの未承認アクセスを防ぐ必要があります。

メモリは、次のように登録およびアクセスできる必要があります。

ローカル アクセス用に登録されたメモリは、スイッチが WSPRegisterMemory を呼び出したプロセスでのみ使用できます。

ローカル アクセスとリモート アクセスの両方に登録されているメモリには、スイッチが WSPRegisterRdmaMemory を呼び出してメモリを登録するプロセス、またはメモリが登録される SAN ソケットに接続されているリモート ピアからアクセスできます。

メモリには、登録時と接続の確立時にのみアクセスできる必要があります。 SAN サービス プロバイダーは、同じコンピューターまたは SAN 上の他のコンピューター上で実行されている他のプロセスから、そのようなメモリに誤ってアクセスできないようにする必要があります。

読み取りアクセス専用に登録されたメモリは、書き込みアクセスに使用することができません。 書き込みアクセス専用に登録されたメモリは、読み取りアクセスに使用することができません。

登録済みメモリの使用

スイッチは、データ転送セッションのネゴシエートに使用する接続された TCP ソケットごとに、事実上連続する 2 つのメモリ領域を登録します。 スイッチは、メモリの 1 つの領域を使用し、SAN サービス プロバイダー の WSPSend 関数を呼び出すときに、送信データを含むメッセージ バッファーを提供します。 スイッチは、メモリの他の領域を使用し、SAN サービス プロバイダーの WSPRecv 関数を呼び出すときに、メッセージ バッファーをポストしてデータを受信します。

スイッチは通常、RDMA 操作でアプリケーション データを転送する場合のみ RDMA バッファーを登録します。

スイッチがソケットを閉じる前、スイッチは SAN サービス プロバイダーの WSPDeregisterMemory 関数または WSPDeregisterRdmaMemory 関数を呼び出して、保留中のデータ転送操作で現在使用されていないメモリを解放します。 SAN サービス プロバイダーは、未処理のデータ転送操作に関連付けられているメモリも解放する必要があります。