Dela via


Cachelagring av registrerat minne

SAN-tjänstleverantörer kan cachelagra RDMA-buffertar som exponeras för lokal eller fjärråtkomst, för att förbättra prestanda.

Cachelagring av RDMA-buffertar som exponeras för lokal åtkomst

Windows Sockets-växeln anropar en SAN-tjänsteleverantörs WSPRegisterMemory tilläggsfunktion på uppdrag av en applikation för att registrera alla databuffertar som tjänar som antingen den lokala mottagande RDMA-bufferten i ett anrop till WSPRdmaRead-tilläggsfunktionen eller den lokala RDMA-källan i ett anrop till WSPRdmaWrite tilläggsfunktion. Som en del av den här registreringsprocessen måste SAN-tjänstleverantören låsa dessa buffertar till regioner med fysiskt minne och registrera dem med SAN-nätverkskortet. Båda dessa åtgärder är resursintensiva. Därför bör SAN-tjänstleverantören använda cachelagring för att minska kostnaderna för dessa registreringar. Om SAN-tjänstleverantören använder cachelagring förbättras prestandan för program som återanvänder buffertar för dataöverföringar.

SAN-tjänstleverantörer bör cachelagra och frigöra RDMA-buffertar som exponeras för lokal åtkomst enligt beskrivningen i följande lista:

  1. När växeln anropar förlängningsfunktionen WSPDeregisterMemory för att frigöra en buffert bör SAN-tjänstleverantören lämna bufferten registrerad med SAN-nätverkskortet och låsas fast till en region av fysisk minne. SAN-tjänstleverantören bör också lägga till bufferten i ett cacheminne med registrerade buffertar, om bufferten används igen i en efterföljande RDMA-åtgärd och skydda bufferten enligt beskrivningen i nästa listobjekt.

  2. En SAN-tjänstprovider cachelagrar minnesregistreringar baserat på virtuella adresser. När SAN-tjänstleverantören cachelagrar en buffertregistrering måste SAN-tjänstleverantörens proxydrivrutin anropa MmSecureVirtualMemory- funktion för att skydda innehavet av den registrerade bufferten så att operativsystemet meddelar växeln om bufferten släpps (till exempel om ett program anropar funktionen VirtualFree för att frigöra ett virtuellt adressintervall tillbaka till operativsystemet).

  3. När växeln därefter anropar WSPRegisterMemory för att registrera en buffert bör SAN-tjänstleverantören kontrollera cachen för att avgöra om bufferten redan är registrerad. Om SAN-tjänstleverantören hittar bufferten i cacheminnet bör SAN-tjänstleverantören inte utföra någon ytterligare registreringsåtgärd.

  4. Innan de virtuella till fysiska mappningarna av den registrerade bufferten ändras, anropar växeln varje SAN-tjänstleverantörs WSPMemoryRegistrationCacheCallback extensionsfunktion. Varje SAN-tjänstleverantörs proxydrivrutin måste i sin tur anropa funktionen MmUnsecureVirtualMemory för att frigöra ägarskapet för bufferten. Dessutom måste varje SAN-tjänstprovider ta bort bufferten från cacheminnet och måste ta bort buffertregistreringen från SAN-nätverkskortet.

  5. Innan anslutningen mellan en lokal SAN-socket och en fjärransluten peer stängs bör SAN-tjänstleverantören släppa cachelagrade buffertar.

Obs Proxydrivrutinen måste använda try/except mekanism kring kod som har åtkomst till en buffert i användarläge som skyddades via ett anrop till MmSecureVirtualMemory för att förhindra krascher i operativsystemet. Mer information om hur en proxydrivrutin skyddar och släpper buffertar finns i Skydda och frigöra ägarskap för virtuella adresser.

Cachelagring av RDMA-buffertar som exponeras för fjärråtkomst

Windows Sockets-växeln anropar en SAN-tjänstleverantörs WSPRegisterRdmaMemory- tilläggsfunktion för att registrera alla databuffertar som fungerar som fjärr-RDMA-mål för en fjärr-WSPRdmaWrite-anrop eller fjärr-RDMA-källan för ett fjärr-WSPRdmaRead--anrop. Det vill säga, omkopplaren exponerar dessa buffertar för åtkomst av en fjärransluten part. När dataöverföringar från dessa buffertar har slutförts anropar växeln SAN-tjänstleverantörens WSPDeregisterRdmaMemory tilläggsfunktion för att frigöra dessa buffertar så att de inte längre är tillgängliga från fjärr-peer.

SAN-tjänstleverantörer bör cachelagra RDMA-buffertar som exponeras för fjärråtkomst enligt beskrivningen i följande lista.

  1. När Switch anropar WSPDeregisterRdmaMemory för att frigöra en buffert bör SAN-tjänstleverantören lämna bufferten låst i fysiskt minne och registreras med SAN-nätverkskortet. SAN-tjänstleverantören bör också lägga till bufferten i en cache med registrerade buffertar, om bufferten används igen i en efterföljande RDMA-åtgärd. SAN-tjänstleverantören bör dock vidta lämpliga åtgärder för att säkerställa att fjärr peer inte längre kan komma åt bufferten. Obs Om bufferten endast kan göras otillgänglig av SAN-tjänstleverantören som tar bort buffertregistreringen från SAN-nätverkskortet måste SAN-tjänstleverantören göra det. SAN-tjänstleverantören bör dock lämna bufferten låst till en region med fysiskt minne. Det här scenariot ger inte bästa möjliga prestanda men är bättre än ingen cachelagring.

  2. För att cachelagra RDMA-buffertar som exponeras för fjärråtkomst bör SAN-tjänstleverantören och dess proxydrivrutin använda cachelagringsteknikerna enligt beskrivningen i föregående lista för RDMA-buffertar som exponeras för lokal åtkomst.

  3. När växeln därefter anropar WSPRegisterRdmaMemory för att registrera en buffert, bör SAN-tjänstleverantören kontrollera sin cache för att avgöra om bufferten redan är registrerad. Om SAN-tjänstleverantören hittar bufferten i cacheminnet bör SAN-tjänstleverantören helt enkelt exponera bufferten för fjärråtkomst, ingen ytterligare registreringsåtgärd krävs. Men om buffertregistreringen tidigare har tagits bort från SAN-nätverkskortet bör SAN-tjänstleverantören registrera bufferten igen.

  4. För att frigöra RDMA-buffertar som exponeras för fjärråtkomst bör SAN-tjänstleverantören och dess proxydrivrutin använda de tekniker som beskrivs i föregående lista.