Registrieren von Arbeitsspeicher für Vorgänge in einem SAN
Der Windows Sockets-Switch ruft die Erweiterungsfunktionen eines SAN-Dienstanbieters auf, um alle Datenpuffer für das Senden und Empfangen von Nachrichten und für RDMA-Vorgänge in einem Systembereichsnetzwerk zu registrieren. Diese Erweiterungsfunktionen registrieren einen Puffer in einer Region des physischen Arbeitsspeichers zur Verwendung in einem bestimmten SAN-Socket, der mit einem Remotepeer verbunden ist. Eine Beschreibung dieser Erweiterungsfunktionen finden Sie unter Windows Sockets SPI-Erweiterungen für SANs.
Registrieren von Datenpuffern
Der Switch ruft die WSPRegisterMemory-Erweiterungsfunktion eines SAN-Dienstanbieters im Namen einer Anwendung auf, die in einem lokalen Prozess ausgeführt wird, um Datenpuffer zu registrieren, auf die nur dieser Prozess zugreifen kann. Der Puffer verarbeitet, der von WSPRegisterMemory zurückgegeben wird, ist nur im Kontext des lokalen Prozesses gültig, der die Registrierung ausgeführt hat. Der Switch ruft WSPRegisterMemory auf, um Puffer zu registrieren, die als Nachrichtenempfangspuffer in einem Aufruf der WSPRecv-Funktion oder des Nachrichtensendepuffers in einem Aufruf der WSPSend-Funktion dienen. Der Switch ruft auch WSPRegisterMemory auf, um Puffer zu registrieren, die als lokaler empfangender RDMA-Puffer in einem Aufruf der WSPRdmaRead-Erweiterungsfunktion oder der lokalen RDMA-Quelle in einem Aufruf der WSPRdmaWrite-Erweiterungsfunktion dienen. Nachdem der lokale Prozess die Verwendung von Puffern abgeschlossen hat, die bei WSPRegisterMemory registriert wurden, ruft der Switch die WSPDeregisterMemory-Erweiterungsfunktion auf, um diese Puffer freizugeben.
Der Switch ruft die WSPRegisterRdmaMemory-Erweiterungsfunktion des SAN-Dienstanbieters im Namen einer Anwendung auf, die in einem lokalen Prozess ausgeführt wird, um RDMA-Puffer zu registrieren, auf die sowohl lokale Prozesse als auch Remoteprozesse zugreifen können. Die von WSPRegisterRdmaMemory zurückgegebenen Pufferdeskriptoren sind nur für RDMA-Datenübertragungsvorgänge gültig, die ein Remotepeer im Kontext der Verbindung des Peers mit dem SAN-Socket initiiert, auf dem die Registrierung durchgeführt wurde. Der Switch an der Remotepeerverbindung verwendet diese RDMA-Puffer entweder als Ziel in einem Aufruf der WSPRdmaWrite-Erweiterungsfunktion oder als Quelle in einem Aufruf der WSPRdmaRead-Erweiterungsfunktion . Nachdem die lokalen und Remoteprozesse die Verwendung von Puffern abgeschlossen haben, die bei WSPRegisterRdmaMemory registriert wurden, ruft der Switch die WSPDeregisterRdmaMemory-Erweiterungsfunktion auf, um diese Puffer freizugeben.
Verwalten des Speicherzugriffs
Ein SAN-Dienstanbieter muss den nicht autorisierten Zugriff auf den registrierten Arbeitsspeicher verhindern.
Der Arbeitsspeicher muss wie folgt registriert und zugänglich sein:
Der für den lokalen Zugriff registrierte Arbeitsspeicher sollte nur für den Prozess verfügbar sein, in dem der Switch WSPRegisterMemory aufgerufen hat.
Auf den sowohl für den lokalen Zugriff als auch für den Remotezugriff registrierten Speicher kann entweder über den Prozess zugegriffen werden, in dem der Switch WSPRegisterRdmaMemory zum Registrieren des Arbeitsspeichers verwendet wird, oder über den Remotepeer, der mit dem SAN-Socket verbunden ist, bei dem der Speicher registriert ist.
Der Zugriff auf den Arbeitsspeicher darf nur während der Registrierung und während der Verbindungsherstellung möglich sein. Ein SAN-Dienstanbieter muss sicherstellen, dass er diesen Arbeitsspeicher nicht versehentlich für andere Prozesse zugänglich macht, die auf demselben Computer oder auf anderen Computern im SAN ausgeführt werden.
Arbeitsspeicher, der nur für den Lesezugriff registriert ist, darf nicht für den Schreibzugriff verfügbar sein. Arbeitsspeicher, der nur für den Schreibzugriff registriert ist, darf nicht für den Lesezugriff verfügbar sein.
Verwenden des registrierten Arbeitsspeichers
Der Switch registriert zwei praktisch zusammenhängende Speicherbereiche für jeden verbundenen TCP-Socket, um eine Datenübertragungssitzung auszuhandeln. Der Switch verwendet eine Speicherregion, um Nachrichtenpuffer bereitzustellen, die Sendedaten enthalten, wenn die WSPSend-Funktion eines SAN-Dienstanbieters aufgerufen wird. Der Switch verwendet den anderen Bereich des Arbeitsspeichers, um Nachrichtenpuffer zu posten, um Daten zu empfangen, wenn die WSPRecv-Funktion eines SAN-Dienstanbieters aufgerufen wird.
Der Switch registriert RDMA-Puffer in der Regel nur, wenn er Anwendungsdaten in RDMA-Vorgängen überträgt.
Bevor der Switch einen Socket schließt, ruft der Switch entweder WSPDeregisterMemory - oder WSPDeregisterRdmaMemory-Funktionen eines SAN-Dienstanbieters auf, um arbeitsspeicher freizugeben, den ein ausstehender Datenübertragungsvorgang derzeit nicht verwendet. Der SAN-Dienstanbieter muss auch Arbeitsspeicher freigeben, der mit ausstehenden Datenübertragungsvorgängen verknüpft ist.