共用方式為


操作SAN時註冊記憶體

Windows Sockets 交換器會呼叫 SAN 服務提供者的擴充功能,以註冊所有數據緩衝區,以傳送和接收訊息,以及系統局域網路上的 RDMA 作業。 這些擴展函數會將緩衝區註冊到一個實體記憶體區域,用於連接到遠端對等端的特定SAN套接字上。 如需這些擴充功能的說明,請參閱適用於 SAN 的 Windows Sockets SPI 擴充功能

註冊數據緩衝區

交換機代表在本機程序中執行的應用程式,呼叫 SAN 服務提供者的 WSPRegisterMemory 擴充功能函式,以註冊只能由該程序存取的資料緩衝區。 WSPRegisterMemory 傳回的緩衝區句柄僅在進行註冊的本地進程中有效。 交換機會呼叫 WSPRegisterMemory 以註冊緩衝區,這些緩衝區可以在呼叫 WSPRecv 函式時作為訊息接收緩衝區,或在呼叫 WSPSend 函式時作為訊息傳送緩衝區。 交換機還會呼叫 WSPRegisterMemory,以便在呼叫 WSPRdmaRead 擴充功能函式時,註冊緩衝區做為本機接收 RDMA 緩衝區,或在呼叫 WSPRdmaWrite 擴充功能函式時,做為本機 RDMA 資源。 在本地進程完成使用向 WSPRegisterMemory註冊的緩衝區後,交換機會呼叫 WSPDeregisterMemory 擴充函式來釋放這些緩衝區。

交換器會代表本機程序中執行的應用程式,呼叫 SAN 服務提供者的 WSPRegisterRdmaMemory 擴充功能函式,來註冊本機和遠端程序可以存取的 RDMA 緩衝區。 WSPRegisterRdmaMemory 傳回的緩衝區描述元僅適用於遠端對等在對等連線至註冊時執行的 SAN 套接字內容中初始化的 RDMA 數據傳輸作業。 遠端對等連線的交換器會使用這些 RDMA 緩衝區作為在呼叫 WSPRdmaWrite 擴充函式時的目標,或者在呼叫 WSPRdmaRead 擴充函式時的來源。 在本機和遠端程序完成使用透過 WSPRegisterRdmaMemory註冊的緩衝區後,交換機會呼叫 WSPDeregisterRdmaMemory 擴充函式來釋放這些緩衝區。

管理記憶體存取

SAN 服務提供者必須防止未經授權存取已註冊的記憶體。

記憶體必須註冊且可存取,如下所示:

針對本機存取註冊的記憶體,應僅供執行呼叫 WSPRegisterMemory的進程使用。

針對本機和遠端存取註冊的記憶體,可以由名為 WSPRegisterRdmaMemory 的函數 來註冊記憶體的程序,或由連接到註冊記憶體之 SAN 套接字的遠端對等進行存取。

只有在註冊和建立連接時,才能存取記憶體。 SAN 服務提供者必須確保它不會不小心讓在相同電腦上或 SAN 上其他電腦上執行的其他進程存取這類記憶體。

僅針對讀取存取註冊的記憶體不能用於寫入存取。 僅針對寫入存取註冊的記憶體不能用於讀取存取。

使用已註冊的記憶體

交換器會為每個連接的 TCP 套接字註冊兩個幾乎連續的記憶體區域,以用於交涉數據傳輸會話。 當呼叫 SAN 服務提供者的 WSPSend 函式时,交換器會使用一個記憶體區域來提供包含要發送數據的訊息緩衝區。 交換機會使用記憶體的其他區域來分配訊息緩衝區,在呼叫 SAN 服務提供者的 WSPRecv 函式時接收資料。

只有在 RDMA 作業中傳輸應用程式數據時,交換器才會註冊 RDMA 緩衝區。

在交換器關閉套接字之前,交換器會呼叫 SAN 服務提供者的 WSPDeregisterMemoryWSPDeregisterRdmaMemory 函式,以釋放未在待定數據傳輸作業中使用的任何記憶體。 SAN 服務提供者也必須釋放與未完成數據傳輸作業相關聯的記憶體。