配置和釋放 SAN Proxy 驅動程式的記憶體
代理驅動程式必須設定使用者緩衝區的存取權,以便 Windows Sockets 切換能夠傳輸控制訊息並執行 RDMA 操作。 若要要求這種類型的緩衝區存取,代理驅動程式會將裝置物件的 旗標 成員中的位設定為 DO_DIRECT_IO。 Proxy 驅動程式必須在每次被要求時,配置或釋放用於訊息傳輸和 RDMA 的記憶體。 當 Windows Sockets 參數要求 SAN 服務提供者註冊或釋放記憶體時,SAN 服務提供者會要求其 Proxy 驅動程式分別配置或釋放物理記憶體。 如需設定緩衝區存取和配置和釋放記憶體的詳細資訊,請參閱 記憶體管理 和 緩衝區管理。
為 RDMA 配置低記憶體
Proxy 驅動程式必須配置可用於 RDMA 作業的記憶體。 Proxy 驅動程式可以為 RDMA 作業分配低位記憶體,即使是在已設定為無法分配低於 4 GB 實體記憶體的系統上。 (這稱為 NOLOWMEM 組態。)代理驅動程式會呼叫 MmAllocateContiguousMemorySpecifyCache 函式或其本身的 DMA AllocateCommonBuffer 函式來擷取低位記憶體。
若要擷取其 DMA AllocateCommonBuffer 函式的指標,Proxy 驅動程式會執行下列步驟:
零會初始化 DEVICE_DESCRIPTION 結構,然後將其SAN NIC 的相關信息寫入此結構。
呼叫 IoGetDmaAdapter,以擷取其 SAN NIC 之 DMA 配接器結構的指標。 在此呼叫中,驅動程式會將指標傳遞至填入的 DEVICE_DESCRIPTION 結構體。 IoGetDmaAdapter 會傳回包含 DMA_OPERATIONS 結構的指標的 DMA 配接器結構的指標。 DMA_OPERATIONS包含系統定義之 DMA 函式集的指標。 其中一個函式是 AllocateCommonBuffer,它會配置實體連續的 DMA 緩衝區。