共用方式為


快取已註冊的記憶體

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

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

Windows Sockets 開關會代表應用程式呼叫 SAN 服務提供者的 WSPRegisterMemory 擴展函數,以註冊所有作為本機接收 RDMA 緩衝區的數據緩衝區。在呼叫 WSPRdmaRead 擴展函數或作為本機 RDMA 來源的數據緩衝區時,呼叫 WSPRdmaWrite 擴展函數。 在此註冊程式中,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 擴充函式,以註冊作為遠端 RDMA 寫入操作的目標或遠端 RDMA 讀取操作來源的所有數據緩衝區,使用者可透過遠端 WSPRdmaWrite 呼叫或遠端 WSPRdmaRead 呼叫進行使用。 也就是說,該交換機會將這些緩衝區暴露給遠端對等節點進行存取。 從這些緩衝區傳輸數據完成之後,交換機會呼叫 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 驅動程式應該使用上述清單中所述的技術。