共用方式為


快取已註冊的記憶體

SAN 服務提供者可以快取針對本機或遠端存取公開的 RDMA 緩衝區,以改善效能。

快取針對本機存取公開的 RDMA 緩衝區

Windows Sockets 參數代表應用程式呼叫 SAN 服務提供者的 WSPRegisterMemory 擴充功能函式,以註冊在呼叫 WSPRdmaRead 擴充功能函式中作為本機接收 RDMA 緩衝區的所有資料緩衝區,或呼叫 WSPRdmaWrite 擴充功能函式中的本機 RDMA 來源。 在此註冊程式中,SAN 服務提供者必須將這些緩衝區鎖定到實體記憶體的區域,並向 SAN NIC 註冊這些緩衝區。 這兩個作業都需要大量資源。 因此,SAN 服務提供者應該使用快取來減少這些註冊的額外負荷。 如果 SAN 服務提供者使用快取,則會改善重複使用緩衝區進行資料傳輸的應用程式效能。

SAN 服務提供者應該快取並釋放針對本機存取公開的 RDMA 緩衝區,如下列清單所述:

  1. 當參數呼叫 WSPDeregisterMemory 擴充功能以釋放緩衝區時,SAN 服務提供者應該讓緩衝區向 SAN NIC 註冊,並鎖定為實體記憶體的區域。 SAN 服務提供者也應該將緩衝區新增至已註冊緩衝區的快取,以防緩衝區在後續 RDMA 作業中再次使用,以及保護緩衝區擁有權,如下一個清單專案所述。

  2. SAN 服務提供者會根據虛擬位址快取記憶體註冊。 當 SAN 服務提供者快取緩衝區的註冊時,SAN 服務提供者的 Proxy 驅動程式必須呼叫 MmSecureVirtualMemory 函式來保護該已註冊緩衝區的擁有權,讓作業系統在緩衝區釋出 (時通知交換器,例如,如果應用程式呼叫 VirtualFree 函式,將虛擬位址範圍釋放回作業系統) 。

  3. 當參數後續呼叫 WSPRegisterMemory 來註冊緩衝區時,SAN 服務提供者應該檢查其快取,以判斷緩衝區是否已註冊。 如果 SAN 服務提供者在其快取中找到緩衝區,SAN 服務提供者就不應該執行任何進一步的註冊動作。

  4. 在註冊緩衝區的虛擬對實體對應後續變更之前,交換器會呼叫每個 SAN 服務提供者的 WSPMemoryRegistrationCacheCallback 擴充功能函式。 接著,每個 SAN 服務提供者的 Proxy 驅動程式都必須呼叫 MmUnsecureVirtualMemory 函式 ,以釋放緩衝區的擁有權。 此外,每個 SAN 服務提供者都必須從其快取中移除緩衝區,而且必須從 SAN NIC 移除緩衝區註冊。

  5. 在本機 SAN 通訊端與遠端對等之間的連線關閉之前,SAN 服務提供者應該釋放任何快取的緩衝區。

注意 Proxy 驅動程式必須使用 try/except 機制來存取透過呼叫 MmSecureVirtualMemory 保護的使用者模式緩衝區的程式碼,以防止作業系統當機。 如需 Proxy 驅動程式如何保護及釋放緩衝區的詳細資訊,請參閱 保護及釋放虛擬位址的擁有權

快取針對遠端存取公開的 RDMA 緩衝區

Windows Sockets 參數會呼叫 SAN 服務提供者的 WSPRegisterRdmaMemory 擴充功能函式,以註冊所有作為遠端 WSPRdmaWrite 呼叫遠端 RDMA 目標的資料緩衝區,或遠端 WSPRdmaRead 呼叫的遠端 RDMA 來源。 也就是說,交換器會公開這些緩衝區以供遠端對等存取。 從這些緩衝區傳輸資料完成後,交換器會呼叫 SAN 服務提供者的 WSPDeregisterRdmaMemory 延伸模組函式來釋放這些緩衝區,使其無法再從遠端對等存取這些緩衝區。

SAN 服務提供者應該快取針對遠端存取公開的 RDMA 緩衝區,如下列清單所述:

  1. 當 Switch 呼叫 WSPDeregisterRdmaMemory 以釋放緩衝區時,SAN 服務提供者應該將緩衝區鎖定在實體記憶體中,並向 SAN NIC 註冊。 SAN 服務提供者也應該將緩衝區新增至已註冊緩衝區的快取,以防緩衝區在後續 RDMA 作業中再次使用。 不過,SAN 服務提供者應該採取適當的動作,以確保遠端對等無法再存取緩衝區。 注意 如果 SAN 服務提供者只能讓從 SAN NIC 移除緩衝區註冊的無法存取緩衝區,SAN 服務提供者必須這麼做。 不過,SAN 服務提供者應該將緩衝區鎖定為實體記憶體的區域。 此案例不提供最佳效能,但比不快取更好。

  2. 若要快取針對遠端存取公開的 RDMA 緩衝區,SAN 服務提供者及其 Proxy 驅動程式應該使用先前針對本機存取公開的 RDMA 緩衝區清單中所述的快取技術。

  3. 當參數後續呼叫 WSPRegisterRdmaMemory 來註冊緩衝區時,SAN 服務提供者應該檢查其快取,以判斷緩衝區是否已註冊。 如果 SAN 服務提供者在其快取中尋找緩衝區,SAN 服務提供者應該只公開緩衝區以進行遠端存取,不需要進一步的註冊動作。 不過,如果先前已從 SAN NIC 移除緩衝區註冊,SAN 服務提供者應該再次註冊緩衝區。

  4. 若要釋放針對遠端存取公開的 RDMA 緩衝區,SAN 服務提供者及其 Proxy 驅動程式應該使用上述清單中所述的技術。