Freigeben über


Zwischenspeichern des registrierten Arbeitsspeichers

SAN-Dienstanbieter können RDMA-Puffer zwischenspeichern, die entweder für den lokalen Zugriff oder den Remotezugriff verfügbar gemacht werden, um die Leistung zu verbessern.

Zwischenspeichern von RDMA-Puffern, die für den lokalen Zugriff verfügbar gemacht werden

Der Windows Sockets-Switch ruft die WSPRegisterMemory-Erweiterungsfunktion eines SAN-Dienstanbieters im Namen einer Anwendung auf, um alle Datenpuffer zu registrieren, die entweder als lokaler empfangender RDMA-Puffer in einem Aufruf der WSPRdmaRead-Erweiterungsfunktion oder der lokalen RDMA-Quelle in einem Aufruf der WSPRdmaWrite-Erweiterungsfunktion dienen. Im Rahmen dieses Registrierungsprozesses muss der SAN-Dienstanbieter diese Puffer für Regionen mit physischem Speicher sperren und bei der SAN NIC registrieren. Beide Vorgänge sind ressourcenintensiv. Daher sollte der SAN-Dienstanbieter die Zwischenspeicherung verwenden, um den Aufwand dieser Registrierungen zu reduzieren. Wenn der SAN-Dienstanbieter zwischengespeichert wird, verbessert sich die Leistung von Anwendungen, die Puffer für Datenübertragungen wiederverwenden.

SAN-Dienstanbieter sollten RDMA-Puffer zwischenspeichern und freigeben, die für den lokalen Zugriff verfügbar gemacht werden, wie in der folgenden Liste beschrieben:

  1. Wenn der Switch die WSPDeregisterMemory-Erweiterungsfunktion aufruft, um einen Puffer freizugeben, sollte der SAN-Dienstanbieter den Puffer bei der SAN-NIC registriert und für eine Region des physischen Arbeitsspeichers gesperrt lassen. Der SAN-Dienstanbieter sollte den Puffer auch einem Cache mit registrierten Puffern hinzufügen, falls der Puffer in einem nachfolgenden RDMA-Vorgang erneut verwendet wird, und den Besitz des Puffers sichern, wie im nächsten Listenelement beschrieben.

  2. Ein SAN-Dienstanbieter speichert Speicherregistrierungen basierend auf virtuellen Adressen zwischen. Wenn der SAN-Dienstanbieter die Registrierung eines Puffers zwischenspeichert, muss der Proxytreiber des SAN-Dienstanbieters die MmSecureVirtualMemory-Funktion aufrufen, um den Besitz dieses registrierten Puffers zu sichern, damit das Betriebssystem den Switch benachrichtigt, wenn der Puffer freigegeben wird (z. B. wenn eine Anwendung die VirtualFree-Funktion aufruft, um einen virtuellen Adressbereich zurück an das Betriebssystem freizugeben).

  3. Wenn der Switch anschließend WSPRegisterMemory aufruft, um einen Puffer zu registrieren, sollte der SAN-Dienstanbieter seinen Cache überprüfen, um festzustellen, ob der Puffer bereits registriert ist. Wenn der SAN-Dienstanbieter den Puffer in seinem Cache findet, sollte der SAN-Dienstanbieter keine weitere Registrierungsaktion ausführen.

  4. Bevor sich die virtuellen zu physischen Zuordnungen des registrierten Puffers anschließend ändern, ruft der Switch die WSPMemoryRegistrationCacheCallback-Erweiterungsfunktion jedes SAN-Dienstanbieters auf. Der Proxytreiber jedes SAN-Dienstanbieters wiederum muss die MmUnsecureVirtualMemory-Funktion aufrufen, um den Besitz des Puffers freizugeben. Darüber hinaus muss jeder SAN-Dienstanbieter den Puffer aus seinem Cache und die Pufferregistrierung aus der SAN-NIC entfernen.

  5. Bevor die Verbindung zwischen einem lokalen SAN-Socket und einem Remotepeer geschlossen wird, sollte der SAN-Dienstanbieter alle zwischengespeicherten Puffer freigeben.

Hinweis Der Proxytreiber muss den try/except-Mechanismus für Code verwenden, der auf einen Benutzermoduspuffer zugreift, der durch einen Aufruf von MmSecureVirtualMemory gesichert wurde, um Betriebssystemabstürze zu verhindern. Weitere Informationen zum Sichern und Freigeben von Puffern durch einen Proxytreiber finden Sie unter Sichern und Freigeben des Besitzes virtueller Adressen.

Zwischenspeichern von RDMA-Puffern, die für den Remotezugriff verfügbar gemacht werden

Der Windows Sockets-Switch ruft die WSPRegisterRdmaMemory-Erweiterungsfunktion eines SAN-Dienstanbieters auf, um alle Datenpuffer zu registrieren, die entweder als REMOTE-RDMA-Ziel eines WSPRdmaWrite-Remoteaufrufs oder als REMOTE-RDMA-Quelle eines WSPRdmaRead-Remoteaufrufs dienen. Das heißt, der Switch macht diese Puffer für den Zugriff durch einen Remotepeer verfügbar. Nachdem die Datenübertragungen aus diesen Puffern abgeschlossen sind, ruft der Switch die WSPDeregisterRdmaMemory-Erweiterungsfunktion des SAN-Dienstanbieters auf, um diese Puffer freizugeben, sodass sie vom Remotepeer nicht mehr zugänglich sind.

SAN-Dienstanbieter sollten RDMA-Puffer zwischenspeichern, die für den Remotezugriff verfügbar gemacht werden, wie in der folgenden Liste beschrieben:

  1. Wenn der Switch WSPDeregisterRdmaMemory aufruft, um einen Puffer freizugeben, sollte der SAN-Dienstanbieter den Puffer im physischen Speicher gesperrt lassen und bei der SAN-Netzwerkkarte registriert sein. Der SAN-Dienstanbieter sollte den Puffer auch einem Cache registrierter Puffer hinzufügen, falls der Puffer in einem nachfolgenden RDMA-Vorgang erneut verwendet wird. Der SAN-Dienstanbieter sollte jedoch geeignete Maßnahmen ergreifen, um sicherzustellen, dass der Remotepeer nicht mehr auf den Puffer zugreifen kann. Hinweis Wenn der SAN-Dienstanbieter, der die Pufferregistrierung aus der SAN-NIC entfernt, nur für den Zugriff auf den Puffer gesperrt werden kann, muss der SAN-Dienstanbieter dies tun. Der SAN-Dienstanbieter sollte den Puffer jedoch für eine Region mit physischem Arbeitsspeicher gesperrt lassen. Dieses Szenario bietet nicht die bestmögliche Leistung, ist aber besser als kein Zwischenspeichern.

  2. Zum Zwischenspeichern von RDMA-Puffern, die für den Remotezugriff verfügbar gemacht werden, sollten der SAN-Dienstanbieter und sein Proxytreiber die Inspeicherungstechniken verwenden, wie in der vorherigen Liste für RDMA-Puffer beschrieben, die für den lokalen Zugriff verfügbar gemacht werden.

  3. Wenn der Switch anschließend WSPRegisterRdmaMemory aufruft, um einen Puffer zu registrieren, sollte der SAN-Dienstanbieter seinen Cache überprüfen, um festzustellen, ob der Puffer bereits registriert ist. Wenn der SAN-Dienstanbieter den Puffer in seinem Cache findet, sollte der SAN-Dienstanbieter den Puffer einfach für den Remotezugriff verfügbar machen. Es ist keine weitere Registrierungsaktion erforderlich. Wenn die Pufferregistrierung jedoch zuvor aus der SAN-Netzwerkkarte entfernt wurde, sollte der SAN-Dienstanbieter den Puffer erneut registrieren.

  4. Um RDMA-Puffer freizugeben, die für den Remotezugriff verfügbar gemacht werden, sollten der SAN-Dienstanbieter und sein Proxytreiber die in der vorherigen Liste beschriebenen Techniken verwenden.